Python親子関係--継承(反テロエリートケース、応用と練習)

26718 ワード

1.継承
1.1継承の概念
継承は、クラスAがクラスBから継承されるクラスBからメンバー情報を取得するクラス間関係を記述する.
メンバー情報を提供するクラスを親クラス(ベースクラス)と呼び、メンバー情報を取得するクラスを子クラス(派生クラス)と呼ぶ.
1.2継承の役割
子クラスでは、親クラスのメンバー(メンバー変数、メンバーメソッド)を使用できます.
1.3継承された構文フォーマット
class   (   ):
    pass

1.4継承関係スペクトルの取得
Python内蔵プロパティを使用するmro__継承関係を表示できます
構文形式:クラス名.mro
説明:mroはMethod Resolution Orderメソッドの解析順序であり、すべてのクラスにPythonシステムのデフォルトから共通の親bojectがあります.
1.5注意事項
  • 子クラス親クラスにないメンバー
  • を追加できます.
  • 親プライベートメンバーは継承できません
  • 2.書き換え
    2.1書き換えの概念
    書き換えとは、子クラスで親と同じ名前のメンバーメソッドを定義することです.
    2.2書き換えの役割
    子クラスが親クラスのメンバーメソッドを書き換えた後、子クラスオブジェクトを使用してメソッドを呼び出すと、子クラスの書き換えメソッドが実行されます.
    2.3サブクラスで親にアクセスする書き換え方法
    フォーマット1:親クラス名.メソッド名(オブジェクト)
    フォーマット2:super(本クラス名、オブジェクト).メソッド名()
    (推奨)フォーマット3:super().メソッド名()
    3.マルチ継承
    3.1多継承の概念
    1つのクラスが複数のクラスを同時に継承することをマルチ継承と呼ぶ
    3.2マルチ継承構文フォーマットの定義
    class   (   1,   2...):
        pass
    

    3.3複数継承関係における親メンバーへのアクセス競合
    マルチ継承関係では、複数の親が同じ名前のメンバーを持ち、サブクラスが呼び出されると、継承関係の最初の宣言されたクラスメンバーが呼び出されます.
    4.マルチステート
    4.1多態の概念
    1つのオブジェクトは多様な形態を有し、字の異なる使用環境では異なる形態でその機能を示し、このオブジェクトが多態的特徴を有すると称する.
    例:一人で、先生でもあるし、父でもあるし、运転手でもある.
    4.2アヒルのタイプ
    アヒルのタイプは特殊な呼び出し現象であり、オブジェクトが文法的に呼び出し関係を満たすことができるが、オブジェクトは対応するオブジェクト形態を持っておらず、このオブジェクトがアヒルのタイプを備えていると呼ばれる.
    アヒルのタイプは特殊な多態表現形式である.
    例:水に浮かぶ飛ばない鳥は、遠くからアヒルと呼ばれ、アヒルは飛ばず、水面に浮かんでいる.しかし、理論的にはアヒルではありません.
    4.3注意事項
    マルチステートは通常、関係を継承する上で発生します.
    ケース:テロ対策エリート基礎版
    """
            
         
      :
    1.    ,       life:100  name:     
    2.           
    3.            main,      
    4.      ,      ,Hero Is  
                      
                      
    5.          
    6.     ,                
    7.  Person  __str__  ,          
    8.           
               :     <=0
              break
    """
    class Person:  #     
        def __init__(self,name):  #          hp
            self.name = name
            self.hp = 100
    
        def __str__(self):      #           
            return "%s      :%d" % (self.name, self.hp)
    
    class Hero(Person):     #      ,        
        def fire(self,p):
            damage = 40    #   
            #      ,    self  ,      p,        
            print("%s %s  ,   %d  " % (self.name, p.name, damage))
            p.hp -= damage  #    hp  
    
    class Is(Person):  #   
        def fire(self,p):
            damage = 10
            print("%s %s  ,   %d  " % (self.name, p.name, damage))
            p.hp -= damage
        
    def main():   #      
    #   h  ,      ,    Person name  ,     
        h = Hero("【  】")  
    #   is1  ,  
        is1 = Is("【  】")    
        while True:    #     
            h.fire(is1)   #   h  ,     is1
            is1.fire(h)   #   is1  ,     h
            print(h)
            print(is1)
        #       
            if h.hp <= 0:
                print("%s  ,    " % h.name)
                break
            if is1.hp <= 0:
                print("          ,    ")
                break
    main()  #      
    

    ケース:テロ対策エリート修復版
    """
            ——   
         
      :
    -----------------------   -----------------------
    1.    ,       life:100  name:     
    2.           
    3.            main,      
    4.      ,      ,Hero Is  
                      
                      
    5.          
    6.     ,                
    7.  Person  __str__  ,          
    8.           
               :     <=0
              break
    -----------------------   -----------------------
    9.           
             0 - 1- 70 - 99- 100
        if..elif..   and    
    10.          
                
    class Person:  #     
        def __init__(self,name):  #          hp
            self.name = name
            self.hp = 100
    
        def __str__(self):      #           
            return "%s      :%d" % (self.name, self.hp)
    
    class Hero(Person):     #      ,        
        def fire(self,p):
            damage = 40    #   
            #      ,    self  ,      p,        
            print("%s %s  ,   %d  " % (self.name, p.name, damage))
            if p.hp < damage:  #     hp         
                p.hp = 0        #   0,          
            else:
                p.hp -= damage  #    hp  
        
        #      str  ,       ,      str
        def __str__(self):     
        #             ,    self        
            #    state = "?"
            if self.hp == 100:
                state = "  "
            elif self.hp >= 70 and self.hp < 100:
                state = "  "
            elif self.hp >= 1 and self.hp < 70:
                state = "  "
            elif self.hp >= 0:
                state = "  "
            return "%s     :%s" % (self.name, state)  #     
    
    class Is(Person):  #   
        def fire(self,p):
            damage = 10
            print("%s %s  ,   %d  " % (self.name, p.name, damage))
            if p.hp < damage:  #     hp         
                p.hp = 0        #   0,          
            else:
                p.hp -= damage  #    hp  
        
    def main():   #      
    #   h  ,      ,    Person name  ,     
        h = Hero("【  】")  
    #   is1  ,  
        is1 = Is("【  】")    
        while True:    #     
            h.fire(is1)   #   h  ,     is1
            is1.fire(h)   #   is1  ,     h
            print(h)
            print(is1)
            print()   #     ,      
        #       
            if h.hp <= 0:
                print("%s  ,    " % h.name)
                break
            if is1.hp <= 0:
                print("          ,    ")
                break
    main()  #      
    

    ケース:テロ対策エリート強化版
    """
            ——   
         
      :
    -----------------------   -----------------------
    1.    ,       life:100  name:     
    2.           
    3.            main,      
    4.      ,      ,Hero Is  
                      
                      
    5.          
    6.     ,                
    7.  Person  __str__  ,          
    8.           
               :     <=0
              break
    -----------------------   -----------------------
    9.           
             0 - 1- 70 - 99- 100
        if..elif..   and    
    10.          
                
    import random   #   random
    class Person:  #     
        def __init__(self,name):  #          hp
            self.name = name
            self.hp = 100
    
        def __str__(self):      #           
            return "%s      :%d" % (self.name, self.hp)
    
    class Hero(Person):     #      ,        
        def fire(self,p):
            damage = 40    #   
            #      ,    self  ,      p,        
            print("%s %s  ,   %d  " % (self.name, p.name, damage))
            if p.hp < damage:  #     hp         
                p.hp = 0        #   0,          
            else:
                p.hp -= damage  #    hp  
        
        #      str  ,       ,      str
        def __str__(self):     
        #             ,    self        
            #    state = "?"
            if self.hp == 100:
                state = "  "
            elif self.hp >= 70 and self.hp < 100:
                state = "  "
            elif self.hp >= 1 and self.hp < 70:
                state = "  "
            elif self.hp >= 0:
                state = "  "
            return "%s     :%s" % (self.name, state)  #     
    
    class Is(Person):  #   
        def fire(self,p):
            damage = 10
            print("%s %s  ,   %d  " % (self.name, p.name, damage))
            if p.hp < damage:  #     hp         
                p.hp = 0        #   0,          
            else:
                p.hp -= damage  #    hp  
        
    def main():   #      
    #   h  ,      ,    Person name  ,     
        h = Hero("【  】")  
    #           ,  
        is1 = Is("【  】")
        is2 = Is("【  】")
        is3 = Is("【  】")
        while True:    #     
            x = random.randint(1,3)   #     1-3 
            if x == 1:         #    1,        
                h.fire(is1)
            elif x == 2:        #      
                h.fire(is2)
            else:                  #   
                h.fire(is3)
            is1.fire(h)   #   is1  ,     h
            is2.fire(h)   #       
            is3.fire(h)
            print(h)     #   4     
            print(is1)
            print(is2)
            print(is3)
            print()   #     ,      
        #       
            if h.hp <= 0:
                print("%s  ,    " % h.name)
                break
            #            
            if is1.hp <= 0 and is2.hp <= 0 and is3.hp <= 0:   
                print("          ,    ")
                break
    main()  #      
    

    テロリストの数が増えると、傷害を適切に下げることができる.
    反テロエリートスーパー強化版
    """
            ——     
         
              
             
              
      :
    -----------------------   -----------------------
    1.    ,       life:100  name:     
    2.           
    3.            main,      
    4.      ,      ,Hero Is  
                      
                      
    5.          
    6.     ,                
    7.  Person  __str__  ,          
    8.           
               :     <=0
              break
    -----------------------   -----------------------
    9.           
             0 - 1- 70 - 99- 100
        if..elif..   and    
    10.          
                
    import random   #   random
    class Person:  #     
        def __init__(self,name):  #          hp
            self.name = name
            self.hp = 100
    
        def __str__(self):      #           
            return "%s      :%d" % (self.name, self.hp)
    
    class Hero(Person):     #      ,        
        def fire(self,p):
        #      
            hit = random.randint(1,100)   
            if hit <= 80:    #    80%
                if p.hp == 0:     #       hp=0,    
                    print("     %s  ,  " % p.name)
                else:    #     ,        ,  
                    damage = random.randint(20,50)    # 20-50    
                    print("%s %s  ,   %d  " % (self.name, p.name, damage))
                    if p.hp < damage:  #     hp         
                        p.hp = 0  #   0,          
                    else:
                        p.hp -= damage  #    hp  
            else:
                print("     ")
        
        #      str  ,       ,      str
        def __str__(self):     
        #             ,    self        
            #    state = "?"
            if self.hp == 100:
                state = "  "
            elif self.hp >= 70 and self.hp < 100:
                state = "  "
            elif self.hp >= 1 and self.hp < 70:
                state = "  "
            elif self.hp >= 0:
                state = "  "
            return "%s     :%s" % (self.name, state)  #     
    
    class Is(Person):  #   
        def fire(self,p):
        #      
            hit = random.randint(1,100)
            damage = random.randint(5,15)
            if hit > 80:
                print("%s %s  ,   %d  " % (self.name, p.name, damage))
                if p.hp < damage:  #     hp         
                    p.hp = 0        #   0,          
                else:
                    p.hp -= damage  #    hp  
            else:
                print("     ")
    def main():   #      
    #   h  ,      ,    Person name  ,     
        h = Hero("【  】")  
    #           ,  
        is1 = Is("【  】")
        is2 = Is("【  】")
        is3 = Is("【  】")
        while True:    #     
            x = random.randint(1,3)   #     1-3 
            if x == 1:         #    1,        
                h.fire(is1)
            elif x == 2:        #      
                h.fire(is2)
            else:                  #   
                h.fire(is3)
            is1.fire(h)   #   is1  ,     h
            is2.fire(h)   #       
            is3.fire(h)
            print(h)     #   4     
            print(is1)
            print(is2)
            print(is3)
            print()   #     ,      
        #       
            if h.hp <= 0:
                print("%s  ,    " % h.name)
                break
            #            
            if is1.hp <= 0 and is2.hp <= 0 and is3.hp <= 0:   
                print("          ,    ")
                break
    main()  #