super() | Python从入门到精通:高阶篇之三十一

方法的重写override | Python从入门到精通:高阶篇之三十

super()

我们仍然以Animal和Dog为例。

class Animal:
    def run(self):
        print('动物会跑~~~')

    def sleep(self):
        print('动物睡觉~~~')


class Dog(Animal):
    def bark(self):
        print('汪汪汪~~~') 

    def run(self):
        print('狗跑~~~~')    

现在我们在Animal中添加属性。

    def __init__(self,name):
        self._name = name

    @property
    def name(self):
        return self._name

    @name.setter    
    def name(self,name):
        self._name = name

此时在Dog中创建对象

d = Dog() 

执行结果:

super() | Python从入门到精通:高阶篇之三十一

父类中的所有方法都会被子类继承,包括特殊方法,也可以重写特殊方法。此时先需要给Dog类添加属性。
修改:

d = Dog('旺财') 
# d.name = '小黑'

print(d.name)  

执行结果:

super() | Python从入门到精通:高阶篇之三十一
super() | Python从入门到精通:高阶篇之三十一

重写特殊方法,在Dog类中定义一个age属性。

class Dog(Animal):

    def __init__(self,name,age):
        self._name = name
        self._age = age

    def bark(self):
        print('汪汪汪~~~') 

    def run(self):
        print('狗跑~~~~')   

    @property
    def age(self):
        return self._age

    @age.setter    
    def age(self,age):
        self._age = age      

d = Dog('旺财',18) 
d.name = '小黑'

print(d.name)       
print(d.age) 

执行结果:

super() | Python从入门到精通:高阶篇之三十一

name属性已经在父类中定义,此时希望可以直接调用父类的__init__来初始化父类中定义的属性。

    def __init__(self,name,age):
        Animal__init__(self,name)
        self._age = age

d = Dog('旺财',18) 
print(d.name)       
print(d.age) 

super() | Python从入门到精通:高阶篇之三十一

但是这个时候方法被写死,只能调用父类(Animal)中的属性。如果Dog类的父类更换,则需要修改的程序则会繁琐。不建议使用,我们需要一个动态获取父类的方法。

super() 可以用来获取当前类的父类,并且通过super()返回对象调用父类方法时,不需要传递self。

super().__init__(name)

执行结果:

super() | Python从入门到精通:高阶篇之三十一

配套视频课程,点击这里查看

获取更多资源请订阅Python学习站

上一篇:QC手工设置开机自启动,不能自启动的解决方案(qualitycenter设置)转


下一篇:if语句的习题课 | Python从入门到精通:入门篇之十四