python中性子クラス呼び出し親メソッドのいくつかの詳細(superを正しく使用)


最近pythonプログラムを書く時意外にもサブクラスが親クラスの方法を呼び出すいくつかの詳細な質問を発見した.よく勉強してメモを取るのは以下の通りです.
  • サブクラスのメソッド親クラスを呼び出すメソッドを表示するには、システムを呼び出さないとデフォルトで呼び出されません(javaとは異なります)
  • 呼び出し方法は、以下のプログラムのタグの12,13,14の3行(いずれの方法でも可能)a)persion.init__(self, name, age) b) super(student, self).__init__(name, age) c) super().__init__(name, age)
  • aの方法は従来の呼び出し方法である、bは改良された方法である.違いは、ベースクラスの名前が変更された場合、aメソッドのサブクラスの対応するコードも変更することである.bは直さなくてもいいので、bの方法はもっといいです.コードのメンテナンスを容易にする.c方法はpython 3です.x以上のバージョンで使用する.私はテストしていません.
  • できるはずです.
  • 注意しなければならないのは;superを使用して親メソッドを呼び出す場合は、親は新しいクラスでなければなりません.新しいクラス:すべてのクラスが継承しなければならないクラスです.何も継承したくない場合は、objectクラスの古典クラスに継承します.親がいません.たとえば、私の下のコード3行がobjectの文字がなければ、13行が間違っています.TypeError:must be type、not classobj
  • 私が書いた試験手順:
    1#!/usr/bin/evn python
    2
    3class persion():
    4    def __init__(self, name, age):
    5        self.name = name
    6        self.age = age
    7    def talk(self):
    8        print "i am a persion. name: %s, age: %s" %(self.name, self.age)
    9
    10class student(persion):
    11    def __init__(self, name, age, school):
    12        #persion.__init__(self, name, age)
    13        super(student, self).__init__(name, age)
    14        #super().__init__(name, age)
    15        #  3       .    2  .  3  python3.x    
    16        self.school = school
    17    def talk(self):
    18        print ('i am a student. name: %s, age: %s, school: %s' % (self.name, str(self.age), self.school))
    19        
    20if __name__ == "__main__":
    21    aPer = persion("lin", 2)
    22    aPer.talk()
    23    aStu = student("lin", 3, "MIddleSchool")
    24    aStu.talk()
      :
    i am a persion. name: lin, age: 2
    i am a student. name: lin, age: 3, school: MIddleSchool