方法的重写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()
执行结果:
父类中的所有方法都会被子类继承,包括特殊方法,也可以重写特殊方法。此时先需要给Dog类添加属性。
修改:
d = Dog('旺财')
# d.name = '小黑'
print(d.name)
执行结果:
重写特殊方法,在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)
执行结果:
name属性已经在父类中定义,此时希望可以直接调用父类的__init__来初始化父类中定义的属性。
def __init__(self,name,age):
Animal__init__(self,name)
self._age = age
d = Dog('旺财',18)
print(d.name)
print(d.age)
但是这个时候方法被写死,只能调用父类(Animal)中的属性。如果Dog类的父类更换,则需要修改的程序则会繁琐。不建议使用,我们需要一个动态获取父类的方法。
super() 可以用来获取当前类的父类,并且通过super()返回对象调用父类方法时,不需要传递self。
super().__init__(name)
执行结果:
配套视频课程,点击这里查看
获取更多资源请订阅Python学习站