使用super函数----增量重写普通方法和构造方法

使用super函数----增量重写普通方法和构造方法

在子类中如果重写了超类的方法,通常需要在子类方法中调用超类的同名方法,也就是说,重写超类的方法,实际上应该是一种增量的重写方式,子类方法会在超类的同名方法的基础上

做一些其他的工作。

如果在子类中要访问超类中的方法,需要使用super函数。该函数返回的对象代表超类对象,所以访问super函数返回的对象中的资源都属于超类。super函数可以不带任何参数,

也可以带两个参数,第一个参数表示当前类的继承,第2个参数需要传入self。


本例中Bird类是Animal类的子类。在Bird类的构造方法中通过super函数调用了Animal类的构造方法。在SonBird类的构造方法中通过super函数调用了Bird类的构造方法


class Animal:
    def __init__(self):
        print("Animal init")
class Bird(Animal):
    # 为Bird类的构造方法增加一个参数(hungry)
    def __init__(self,hungry):
        # 调用Animal类的构造方法
        super().__init__()
        self.hugry=hungry
    def eat(self):
        if self.hugry:
            print("已经吃了虫子!")
        else:
            print("已经超过饭了,不饿了")
b=Bird(False)
b.eat()
b.eat()

class SonBird(Bird):
    def __init__(self,hungry):
        # 调用Bird类的构造方法,如果为super函数指定参数,第1个参数需要是当前类的类型(SonBird)
        super(SonBird,self).__init__(hungry)
        self.sound='向天再借500年'
    def sing(self):
        print(self.sound)

a=SonBird(True)
a.sing()
a.eat()


Animal init
已经超过饭了,不饿了
已经超过饭了,不饿了
Animal init
向天再借500年
已经吃了虫子!

 

posted @ 2019-02-16 16:29  effortsing  阅读(234)  评论(0编辑  收藏  举报