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__()的一些行为?
2011-07-31
Slubb