PythonのMixin機能
Pythonが多重継承をサポートした後、動的継承をサポートできますか?プログラム操作の過程で、クラス継承を再定義します。Pythonはこの動的継承をサポートします。これはPythonのミックスインです。クラスを定義する過程で、クラスの継承順序が変更され、クラスが継承されます。モジュールを変更できない場合は、mixinメソッドを使用してクラスのメソッドを動的に追加したり、クラスの元の継承システムを動的に変更したりできます。多重継承を理解すると、ミックスイン機能ははるかに簡単になります。ただし、ミックスイン後の特定の継承システムの変更に注意する必要があります。
#!/ usr / bin / env python import types def MixIn(pyClass、mixInClass、makeAncestor = 0): if makeAncestor: pyClass .__ bases__ =(mixInClass、)+ pyClass .__ bases__ elif mixInClass not in pyClass .__ bases __: pyClass .__ bases__ = pyClass .__ bases__ +(mixInClass、) else: pass class C1(object): def test(self): print'test in C1 ' class C0MixIn(object): def test(self): print'test in C0MixIn' class C2( C1、C0MixIn): def test(self):print'test in C2 ' class C0(C1): pass if __name__ == " __main __":printC0 。__mro__ c1 = C0() c1.test() MixIn(C0、C0MixIn、1) c0 = C0() c0.test() print C0 .__ mro__ print C2 .__ mro__ MixIn(C2、C0MixIn) print C2 .__ mro__
操作の結果は次のとおりです。pythonmixin2.py
折りたたむか開くには(ここをクリック)をクリックします
(<class '__ main __。C0'>、<class '__ main __。C1'>、<type'object '>) C1 テストin C0MixIn (<class' __ main __。C0 '>、<class' __ main __。C0MixIn '> 、<class '__ main __。C1'>、<type'object '>) (<class' __ main __。C2 '>、<class' __ main __。C1 '>、<class' __ main __。C0MixIn '>、<type'object' >) (<class '__ main __。C2'>、<class '__ main __。C1'>、<class '__ main __。C0MixIn'>、<type'object '>)
タグ: python