2017-04-18 79 views
1

我想创建一个特定类的输入进行检查,我有以下组成例如:输入校验功能

class NmbPair: 
    def __init__(self, a = None, b = None): 
     self.a = a 
     self.b = b 

    def __eq__(self, other): 
     if self.a == other.a and self.b == other.b: 
      return True 
     return False 

class NmbOperation: 
    def __init__(self, *, NmbPair1, NmbPair2): 
     if not self.check(NmbPair1, NmbPair2): ## this is the check 
      return 
     self.NmbPair1 = NmbPair1 
     self.NmbPair2 = NmbPair2 
     self._add_first_nmb() 

    def check(self, a, b): 
     if a == b: 
      return False 

    def _add_first_nmb(self): 
     self.sum_a = self.NmbPair1.a + self.NmbPair2.a 

所以我要检查输入NmbPairs是不一样的,如果他们是我不想创建一个NmbOperation的实例。

例如:

t1 = NmbPair(2, 3) 
t2 = NmbPair(2, 2) 
Op1 = NmbOperation(NmbPair1 = t1, NmbPair2 = t2) 
print(Op1.sum_a) 

但这引发错误:

AttributeError: 'NmbOperation' object has no attribute 'sum_a' 

我不太清楚我在做什么错

回答

1

您正在创建一个NmbOperation对象其中__init__方法在执行行之前立即返回

self.NmbPair1 = NmbPair1 
self.NmbPair2 = NmbPair2 
self._add_first_nmb() 

这是因为self.check(NmbPair1, NmbPair2)返回None,所以not self.check(NmbPair1, NmbPair2)True

因此,从不设置属性sum_a,因为从不调用_add_first_nmb

check方法等效于:

def check(self, a, b): 
    if a == b: 
     return False 
    else: 
     return None 

你可能想

def check(self, a, b): 
    return not a == b 
+0

啊......哇,这是这样一个愚蠢的错误 – dimebucker91