python中typeerror是啥意思-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__()的一些行为?

2011-07-31

Slubb

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值