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

发布于 2021-01-29 16:53:37

我知道您不能调用object.__setattr__未继承自的对象object,但是两者之间是否还有其他不同之处?如果这很重要,我正在使用Python
2.6。

关注者
0
被浏览
150
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

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


    原始答案*

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

    您只需要object.__setattr__(...)在类定义内部进行调用,然后仅在直接子类化时objectSpam例如,如果您正在对其他子类进行子类化),则您应该使用该方法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
    • 等等


知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看