为什么设置类对象实例的属性会导致AttributeError?

时间:2019-05-02 04:16:15

标签: python-3.x

为什么以下代码会产生错误

>>> object().foo = 'bar'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'object' object has no attribute 'foo' 

下一个可以正常工作吗?

class A():
    pass

A().foo = 'bar'

A和对象之间的确切区别是什么?我相信o().foo = 'bar'会导致setattr('o', 'foo', 'bar'),而这反过来会导致o.__setattr__('foo', 'bar')。人们会期望它们具有相同的__setattr__方法,因为不会发生覆盖。但是输出是不同的。请解释原因。幕后会发生什么?

对于内置函数和用户定义的函数,可以注意到类似的模式。我无法为dict设置自己的属性,但是写(lambda:None).foo = 'bar'是完全可以的。这是怎么回事?

0 个答案:

没有答案