書き換え方法


親から受け継いだものが必ずしも当てはまるとは限らないとか、例えばDog類にはbarkという方法があり、普通の犬の鳴き声は「ワンワン」ですが、喘天犬はそうではないことに気づいたので、修正してみましょう.
変更方法は簡単です.サブクラスに同じ名前の方法を書けばいいです.
#! /usr/bin/env python
# -*- coding:utf-8 -*-
class Animal:
    def eat(self):
        print("---- ----")
    def drink(self):
        print("---- ----")
    def sleep(self):
        print("---- ----")
    def run(self):
        print("---- ----")

class Dog(Animal):
    def bark(self):
        print("----   ----")

class Xiaotq(Dog):
    def fly(self):
        print("---- ----")
    def bark(self):
        print("----  ----")       #               

p=Xiaotq()
p.fly()
p.bark()
p.eat()

以上の例の実行結果:----飛ぶ------狂って叫ぶ------食べる----
書き換えられた親を呼び出す方法
呼び出し親メソッドの指定
class Xiaotq(Dog):
    def fly(self):
        print("---- ----")
    def bark(self):
        print("----  ----")
        #  1
        super().bark()            #  super()     ,    
        #  2
        Dog.bark(self)            #         

以上の例の実行結果:----飛ぶ------狂う------ワンワン------ワンワン------食べる----
super()関数: , , 。 ? super() ! , super __init__
- __init__ __init__ , super 。super 。 。
#! /usr/bin/env python
# -*- coding:utf-8 -*-
class Monkey():
    arms = 2
    legs = 2

    def __init__(self, color):  #     
        self.color = color

class Human(Monkey):
    def __init__(self, name, color):  #     
        self.name = name
        super().__init__(color)  #              

beckham = Human('beckham', 'red')
print(beckham.name)
print(beckham.color)

以上の例の実行結果:beckhamredsuper.__init__の使用
#! /usr/bin/env python
# -*- coding:utf-8 -*-
class Human():
    def __init__(self, name,age,num):  #     
        self.name=name
        self.num=num
        self.age=age

    def print_type(self):
        print("    %s,  %s,  %s" %(self.name,self.age,self.num))

class xuesheng(Human):
    def __init__(self,name,age,num,gender):  #     
        super().__init__(name,age,num)  #              
        self.gender = gender
    def xueshengxingxi(self):
        print("  【%s】  【%s】  【%s】  【%s】" % (self.name, self.gender, self.age, self.num))

p=xuesheng('ye','18','007','man')
p.xueshengxingxi()    #            
p.print_type()        #           ,                ;  gender
#  :                          。
#  :super()                   ,         。

以上の例の実行結果:氏名【ye】性別【man】年齢【18】学号【007】学生名ye,年齢18,学号007