25.エンタープライズ開発基盤6:オブジェクト向けフィーチャー(継承)

4885 ワード

オブジェクト向けプログラミングの最も主要な特徴は、パッケージ、継承、マルチステートの3つです.
このセクションでは、オブジェクト向けの最初のフィーチャーについて説明します.継承
1継承の意味
継承は私たちの抽象的なオブジェクトの間に一定の所属関係を存在させる継承関係であり、私たちは必ずこのような関係~親、子、子が親から継承され、親の公開された属性と方法(私有の属性や方法を継承できない)を継承することができることを明確にしなければならない.
実は、前にオブジェクトを定義したときに継承を使用しました.pythonのすべてのオブジェクトはobjectオブジェクトから直接または間接的に継承されています.
class Person(object):
    pass

上記のコードでは、Personの後ろに括弧があり、括弧の中に継承されたタイプが定義されています.pythonで継承された構文は
class     (    ):
    pass

次は簡単な継承例です
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#         
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
class Person(object):
    def __init__(self, name,  age, gender):
        self.__name = name
        self.__age  = age
        self.__gender = gender
    #   get       
    def get_name(self):
        return self.__name
    def get_age(self):
        return self.__age
    def get_gender(self):
        return self.__gender
    #   set       
    def set_name(self, name):
        self.__name = name
    def set_age(self, age):
        self.__age= age
    def set_gender(self, gender):
        self.__gender= gender
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#          ,   Person  
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
class Man(Person):
    def __init__(self, name, age):
        Person.__init__(self, name, age, " ")
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
#          ,   Person  
# * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
class Women(Person):
    def __init__(self, name, age):
        Person.__init__(self, name, age, " ")

#            ,               
m = Man("tom", 18)
w = Women("jerry", 16)
print(m.get_gender())   #     : 
print(w.get_gender())    #     : 

カスタムクラスManとWomenでは、initメソッドを簡単に定義しただけで、他のコードはありませんが、作成したManタイプのオブジェクトとWomenタイプのオブジェクトは、親クラスPersonで定義されたメソッドget_を使用することができます.gender()その他、ある程度、私たちの開発を簡素化し、同時にプログラムの拡張性を高めました.
継承:データ型が似ているクラスの一部を表し、共通の属性と方法を抽出して親クラスに個別にカプセル化し、これらのクラスにこの親クラスを継承させ、コードの多重化を実現しながらプログラムの拡張性を高める.
2.継承中のタイプの関係
  • 継承はタイプ間の関係である:継承では、まず2つ以上のタイプ間の関係である必要があり、注意はタイプ間の関係である
  • である.
  • 継承中の親と子:継承されたものを親と呼び、継承を実現したものを子と呼び、子は親から継承され、A is a Bの関係を実現している.例えば、猫は一種のタイプであり、自動物を継承するタイプであり、猫というタイプが動物が備える属性と行為を備え、同時に猫が動物であることを反映している.(A継承BはA is a Bの関係を反映しており、逆に猫は動物であり、動物は猫とは言えない)
  • マルチ継承メカニズム:1つの親に複数のサブクラスがあり、1つのサブクラスにも複数の親
  • があります.
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    #         ,    ,     
    #     ,    
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    #   
    class Person(object):
        pass
    #   
    class Man(Person):
        pass
    #   
    class Women(Person):
        pass
    

    場合によっては、私たちの生活の中でこのような状況が発生します.子供は父親の息子であり、息子が備えるべき機能を備えなければならないと同時に、学生が備えるべき機能を備えなければならないので、Pythonのマルチ継承を使用して実現する必要があります.
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    #          ~   
    #          ~         
    # * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
    class Son(object):
        def fealty(self):
            print("    ")
    class Student(object):
        def study(self):
            print("    ,    ")
    #     ,           
    class Person(Son, Student):
        pass
    #     ,       
    p = Person()
    p.fealty()
    p.study()
    #     
    ~     
    ~     ,    
    
  • データの継承とアクセスpythonの継承メカニズムでは、プライベート属性は継承と相互アクセスが許されず、サブクラスは親クラスのプライベート属性とメソッドを継承およびアクセスすることができず、親クラスも同様に子クラスのプライベート属性とメソッドサブクラスにアクセスすることができず、親クラスで公開されている属性とメソッドサブクラスで親クラスの名前またはsuper()で親クラスにアクセスできる属性とメソッド
  • のみを継承することができる
    #   
    class Person(object):
        def __init__(self, name, age):
            self.__name = name
            self.__age = age
        def play(self):
            print(self.__name + "    ")
    #   
    class Man(Person):
        def __init__(self, name, age):
            #                  
            Person.__init__(self, name,age)
    #   
    class Women(Person):
        def __init__(self, name, age):
            #   super()          
            # super(Women, self).__init....super        
            super().__init__(self, name, age)
    

    3.継承時のメソッド書き換え(メソッド上書き)
    子クラスが親から継承された後、親クラスで定義された公開メソッドを直接使用して操作できます.
    #   
    class Person(object):
        def play(self):
            print("Person          ...")
    #   
    class Children(Person):
         pass
    #       
    c = Children()
    c.play()
    #     
    ~Person          ...
    

    子クラスでは、親クラスから継承する方法を再記述できます.
    #   
    class Person(object):
        def play(self):
            print("Person          ...")
    #   
    class Children(Person):
         #      play  
         def play(self):
            print("Children         .....")
    #       
    c = Children()
    c.play()
    #     
    ~Children         .....
    

    継承関係では、親から継承されたメソッドを子クラスで再定義するプロセスをメソッド書き換えまたはメソッド上書きと呼び、書き換えまたは上書きされたメソッドを経て、子クラスがこのメソッドを実行する場合に実行されるのが書き換えられたメソッドです.
    大牧莫邪png