object.__setattr__
から継承されていないオブジェクトを呼び出すことはできないことは知っていますがobject
、他に何か違いはありますか?これが重要な場合、私はPython2.6で作業しています。
1 に答える
この質問をもう一度読んで、@ paper.cutが何を求めているのかを誤解しました。クラシッククラスと新しいスタイルのクラスの違いです(Python 3以降の問題ではありません)。その答えはわかりません。
元の回答*
setattr(instance, name, value)
instance.__setattr__(name, value)
**のシンタックスシュガーです。
object.__setattr__(...)
クラス定義内で呼び出す必要があるのは、直接サブクラス化する場合のみです。たとえば、object
他の何かをサブクラス化する場合は、を使用して階層内の次のアイテムを取得するか、この方法で呼び出す必要があります。スーパークラスが直接スキップして定義した動作を見逃すリスクを冒さないでください。Spam
super()
Spam.__setattr__(...)
object
* Python3.0以降のクラスと2.xの新しいスタイルのクラスに適用されます
**setattr(x, ...)
とx.__setattr__(...)
が同じでない場合が2つあります。
x
それ自体が__setattr__
プライベート辞書にあります(したがってx.__dict__[__setattr__] = ...
(これはほぼ間違いなくエラーです)x.__class__
メソッドがあり__getattribute__
ます-メソッド/属性が存在する場合でも、すべてのルックアップを__getattribute__
インターセプトするため
注意 :これらの2つの警告は、すべてのシンタックスシュガーショートカットに適用されます。
setattr
getattr
len
bool
hash
- 等