pythonマルチステート

1774 ワード

pythonでは、変数を使用するときに特定のデータ型を指定する必要がないことが最も顕著な特徴です.これにより、同じ変数が異なるオブジェクトに前後して割り当てられる場合があります.
class xiaobai:
    def say(self):
        print("    xiaobai      ")
class lilei:
    def say(self):
        print("    lilei      ")
a = xiaobai()
a.say()

a = lilei()
a.say()
    xiaobai      
    lilei      

aはxiaobaiクラスとlileiクラスのオブジェクトとして前後して付与されることが分かるが,これは多態ではない.クラスのマルチステート特性は、次の2つの前提条件を満たします.
  • 継承:マルチステートは、子と親の間で
  • に発生するに違いありません.
  • 書き換え:サブクラスが親を書き換えた方法
  • class xiaobai:
        def say(self):
            print("    xiaobai  say  ")
    class lilei(xiaobai):
        def say(self):
            print("    lilei  say  ")
    class mary(xiaobai):
        def say(self):
            print("    mary  say  ")
    a = xiaobai()
    a.say()
    
    a = lilei()
    a.say()
    
    a = mary()
    a.say()
        xiaobai  say  
        lilei  say  
        mary  say  
    #    ,lilei mary    xiaobai ,          say()  。
    #    a      say()   ,  a            ,  a.say()            say()  ,     。

    実際、pythonはマルチステートに基づいて、より柔軟なプログラミングメカニズムを生み出しました.
    class whosay:
        def say(self, who):
            who.say()
    class xiaobai:
        def say(self):
            print("    xiaobai  say  ")
    class lilei(xiaobai):
        def say(self):
            print("    lilei  say  ")
    class mary(xiaobai):
        def say(self):
            print("    mary  say  ")
            
    a = whosay()
    a.say(xiaobai())
    a.say(lilei())
    a.say(mary())
        xiaobai  say  
        lilei  say  
        mary  say  

    「アヒルモデル」:whosay()クラスのsay()関数にwhoパラメータを追加し、内部で受信したwhoを使用してsay()メソッドを呼び出します.これは、whosayクラスのsay()メソッドを呼び出すと、whoパラメータに渡されるクラスのインスタンスオブジェクトが、そのクラスのsay()メソッドを呼び出すことを意味します.