setattr()和object .__ setattr __()有什么区别?

setattr()和object .__ setattr __()有什么区别?,第1张

setattr()和object .__ setattr __()有什么区别?

再次阅读这个问题,我误解了@ 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
  • 等等


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5617476.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存