Python 2.7.12 のドキュメントによると:
__setattr__()
インスタンス属性に割り当てたい場合は、単純に実行しないでくださいself.name = value
— これにより、それ自体が再帰的に呼び出されます。代わりに、インスタンス属性のディクショナリに値を挿入する必要がありますself.__dict__[name] = value
。新しいスタイルのクラスの場合、インスタンス ディクショナリにアクセスするのではなく、同じ名前 (object.__setattr__(self, name, value)
.
ただし、次のコードは期待どおりに機能します。
class Class(object):
def __setattr__(self, name, val):
self.__dict__[name] = val;
c = Class()
c.val = 42
print c.val
super(Class, obj).__setattr__(name, value)
すべての基本クラスのメソッドが確実に呼び出されることはわかって__setattr__
いますが、クラシック クラスは基本クラスから継承することもできます。では、なぜ新しいスタイルのクラスにのみ推奨されるのでしょうか?
または、一方で、古典的なクラスでそうすることが推奨されないのはなぜですか?