为什么以下代码会产生错误
>>> 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'
是完全可以的。这是怎么回事?