2017-04-18 115 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