簡単にアクセスしたり、統合したりできるように、あらゆるタイプのクラスを装飾するデコレーターを作成し、それらすべてに標準インターフェースを追加することに成功しました...
私はメタクラスの使用に抵抗してきました。この点に関する文献では、メタクラスは過剰であり、ほとんどの場合、クラス デコレータに置き換えることができると書かれています。私を悩ませているのは次のとおりです。
def Decorator(somearg):
def wrapper(cls):
clsinit = cls.__init__
cls.members = []
def __init__(self, *args, **kwargs):
#do something with somearg...
self.__class__.members.append(self)
clsinit(self,*args,**kwargs)
cls.__init__ = clsinit
return cls
return wrapper
@Decorator('thearg')
class A(object):
pass
a = A()
b = A()
Python デバッガーを使用すると、インポート時にクラス A が引数 'thearg' ですぐに装飾されます。しかし、A() をインスタンス化するたびに、インスタンスはデコレーターで定義された init を直接呼び出し、前のレイヤーを通過しません。クラスが各メンバーを記録し、新しいインスタンスがインスタンス化されるたびにリセットされないようにしたいので、これは素晴らしいことです。しかし、その理由を理解しているかどうかはわかりません。
この特定のケースで、誰かが python インタープリターの物理を説明できますか?