再次阅读这个问题,我误解了@ paper.cut在问什么:经典类和新型类之间的区别(在Python 3+中不是问题)。我不知道答案。
原始答案*
setattr(instance, name, value)是
instance.__setattr__(name, value)**的语法糖。
您只需要
object.__setattr__(...)在类定义内部进行调用,然后仅在直接子类化时
object(
Spam例如,如果您正在对其他子类进行子类化),则您应该使用该方法
super()来获取层次结构中的下一项,或者进行调用
Spam.__setattr__(...)-这样,不要冒险将超类直接跳过到,从而避免错过超类定义的行为
object。
*适用于Python 3.0+类和2.x新型类
**有两个实例,其中
setattr(x, ...)和
x.__setattr__(...)不相同:
x
本身__setattr__
在专用字典中有一个(因此x.__dict__[__setattr__] = ...
(几乎可以肯定这是一个错误)x.__class__
有一个__getattribute__
方法-因为即使方法/属性存在,它也会__getattribute__
拦截 每次 查找
注意:以下 两个警告适用于每个语法糖快捷方式:
setattr
getattr
len
bool
hash
- 等等
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)