方法的重寫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學習站