setattr(obj, attr, value) just calls obj.setattr(attr, value), at least for new-style classes.
setattr(instance, name, value) is syntactic sugar for instance.setattr(name, value).
You would only need to call object.setattr(...) inside a class definition, and then only if directly subclassing object -- if you were subclassing something else, Spam for example, then you should either use super() to get the next item in the heirarchy, or call Spam.setattr(...) -- this way you don't risk missing behavior that super-classes have defined by skipping over them directly to object.
The code is probably using object.setattr for the exact purpose of skipping the superclass's setattr
英文好的麻烦给翻译翻译上面的 4 段话的意思。感谢!
1
czheo 2017-03-02 07:39:42 +08:00
setattr(instance, name, value)是 instance.__setattr__(name, value)的语法糖。
|
2
rwecho 2017-03-02 08:41:16 +08:00
setattr(instance, name, value) 是静态方法,意思为 给一个实例赋值一个属性值
instance.setattr(name, value) 是面向对象方法, 意思为一个实例设置一个属性值. |
3
dant 2017-03-02 08:56:16 +08:00 via Android
setattr 是你在外部调用的
__setattr__ 是你在类里面实现的 |
5
Tianny OP 其实我主要想知道第三段和第四段的意思?
|
7
rwecho 2017-03-02 11:26:47 +08:00 1
等价的.
我理解的意思是: 在类里面可以调用 self.attr(*) 也可以调用 super().attr(*). 这是继承的概念 调用 instance.attr(*)只会执行 instance 的 attr 的方法,从而隐藏了 super(*). 这在 OO 思想里面就是把静态方法变成实例方法, 是思想里面的差距, 和使用功能上没有差距. 另外通过 instance.attr(*) 可以达到链式表达式的效果 |
9
fy 2017-03-02 13:32:58 +08:00
5. 英文也不好,谢谢。
|