PythonのMixin機能

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

おすすめ

転載: blog.csdn.net/qq_42533216/article/details/112979916