gpt4 book ai didi

python - setattr() 和 object.__setattr__() 有什么区别?

转载 作者:太空狗 更新时间:2023-10-29 18:25:55 26 4
gpt4 key购买 nike

我知道您不能对不是从 object 继承的对象调用 object.__setattr__,但是两者之间还有什么不同吗?如果这很重要,我正在使用 Python 2.6。

最佳答案

再次阅读这个问题我误解了@paper.cut 所问的内容:经典类和新型类之间的区别(在 Python 3+ 中不是问题)。我不知道这个问题的答案。


原始答案*

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

您只需要在类定义中调用 object.__setattr__(...),然后仅当直接对 object 进行子类化时——如果您对某物进行子类化否则,例如 Spam,那么您应该使用 super() 获取层次结构中的下一项,或者调用 Spam.__setattr__(...) —— 这样您就不会冒错过父类(super class)定义的行为的风险,方法是直接跳过它们到 object


* 适用于 Python 3.0+ 类和 2.x 新式类


**有两种情况 setattr(x, ...)x.__setattr__(...) 不是相同的:

  • x 本身在它的私有(private)字典中有一个 __setattr__(所以 x.__dict__[__setattr__] = ...(这几乎肯定是一个错误)

  • x.__class__ 有一个 __getattribute__ 方法——因为 __getattribute__ 拦截每个查找,甚至当方法/属性存在时

注意这两个警告适用于每个语法糖快捷方式:

  • setattr
  • getattr
  • len
  • bool
  • 散列
  • 等等

关于python - setattr() 和 object.__setattr__() 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7559170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com