私はデコレータでクラスにミックスインを注入しようとしています。コードが実行されると、クラスにはのdictというプロパティがなくなりますが、dir(インスタンス)にはそのプロパティがあります。私は不動産がどこに消えているのか分かりません。 dictを取得する方法がありますか、そうでなければインスタンスの属性を見つけることができますか?Pythonオブジェクトがmixin注入後に__dict__を失う
def testDecorator(cls):
return type(cls.__name__, (Mixin,) + cls.__bases__, dict(cls.__dict__))
class Mixin:
pass
@testDecorator
class dummyClass:
def __init__(self):
self.testVar1 = 'test'
self.testVar2 = 3.14
inst = dummyClass()
print(dir(inst))
print(inst.__dict__)
このコードは、デコレータがコメントアウトされていても、デコレータが存在するときにエラーが発生した場合に機能します。 Pythonで動く3.5.1
は単にtype'が 'に渡されるマッピングから__dict__'も働く'切除(新しい '__dict__'をディスクリプタは自動的に作成されます)。 '__weakref__'も削除することをお勧めします。 – BrenBarn
さて、 'Mixin'は独自の' __dict__'記述子を持っていますので、新しいものを作成する代わりにそのものを使用しますが、 '__dict__'を削除すると動作するはずです。 – user2357112