2011-09-26 159 views
7

我知道你不能从object继承的对象上调用object.__setattr__,但是两者之间还有什么不同吗?如果这很重要,我正在Python 2.6中工作。setattr()和object .__ setattr __()之间有什么区别?

+0

'setattr'是你在另一个对象上调用的东西,'__setattr __()'是你在你自己的对象上实现的东西。 –

+1

'setattr(obj,attr,value)'只调用'obj .__ setattr __(attr,value)',至少对于新样式类。 – agf

回答

12

setattr(instance, name, value)instance.__setattr__(name, value)的语法糖。

你只需要调用object.__setattr__(...)类定义中,而且只有直接继承object - 如果你继承别的东西,Spam例如,那么应该使用super()获得在层次结构的下一个项目,或致电Spam.__setattr__(...) - 这样您就不会冒险丢失超级班级直接跳过object所定义的行为。

+2

谢谢,这解释了它。代码可能使用'object .__ setattr__'来跳过超类的__setattr__。 –

+0

_“setattr(实例,名称,值)是语法糖,例如.__ setattr __(name,value)”_ - 它是真的吗?我依稀记得有些类型没有'__getattr__',但是无论如何获取属性都适用于它们。这里不一样吗? –

相关问题