我正在實現一個簡單的類來表示一個2D矢量。這裏的是相關的位:Python奇怪的錯誤:「TypeError:'NoneType'對象不可調用」
class Vector:
def __init__(self, x, y):
self.vec_repr = x, y
def __add__(self, other):
new_x = self.x + other.x
new_y = self.y + other.y
return Vector(new_x, new_y)
def __getattr__(self, name):
if name == "x":
return self.vec_repr[0]
elif name == "y":
return self.vec_repr[1]
後來,我有這樣的:
a = Vector(1, 1)
b = Vector(2, 2)
a + b
我得到TypeError: 'NoneType' object is not callable
。這特別奇怪,因爲錯誤沒有被標記爲在任何特定的行上,所以我不知道在哪裏看!
非常奇怪,所以我做了一些實驗,發現它發生在行a+b
。此外,當我重新班級如下:
錯誤消失!
我看到有很多類似這樣的錯誤的問題 - 所有似乎都涉及到某個函數名被某個變量覆蓋的地方,但是我不知道這是怎麼回事!
至於另一條線索,當我改變的__getattr__()
默認返回類型別的東西 - 海峽,例如 - 錯誤搖身一變TypeError: 'str' object is not callable
任何想法,這是怎麼回事?有沒有我不明白的__getattr__()
的一些行爲?
和公正的全貌,它試圖調用'__coerce__' –
@yi_H我不熟悉'__coerce__',但我能猜出它會做什麼,以及爲什麼它會被稱爲! –
哦。哇謝謝。我認爲它在__getattr __()時沒有找到其他地方的屬性。好吧,這非常令人尷尬。 – Slubb