繼承
定義乙個類 animal(動物)
這個類中需要兩個方法:run() sleep()
class animal:
def run(self):
print('動物會跑~~~')
def sleep(self):
print('動物睡覺~~~')
直接從animal類中來繼承它的屬性和方法
- 繼承是物件導向三大特性之一
- 通過繼承我們可以使乙個類獲取到其他類中的屬性和方法
- 在定義類時,可以在類名後的括號中指定當前類的父類(超類、基類、super)
子類(衍生類)可以直接繼承父類中的所有的屬性和方法
通過繼承可以直接讓子類獲取到父類的方法或屬性,避免編寫重複性的**,並且也符合ocp原則
所以我們經常需要通過繼承來對乙個類進行擴充套件
class dog(animal):
def bark(self):
print('汪汪汪~~~')
d = dog()
d.run() # 繼承父類中的方法
r = isinstance(d , dog) # 檢查d是否為dog的例項
r = isinstance(d , animal) # 檢查d是否為animal的例項
print(r)
在建立類時,如果省略了父類,則預設父類為object
object是所有類的父類,所有類都繼承自object
class person(object):
pass
issubclass() 檢查乙個類是否是另乙個類的子類
print(issubclass(animal , dog))
print(issubclass(person , object))
isinstance()用來檢查乙個物件是否是乙個類的例項
如果這個類是這個物件的父類,也會返回true
所有的物件都是object的例項
super()
class animal:
def __init__(self,name):
self._name = name
def run(self):
print('動物會跑~~~')
def sleep(self):
print('動物睡覺~~~')
@property
def name(self):
return self._name
@name.setter
def name(self,name):
self._name = name
# 父類中的所有方法都會被子類繼承,包括特殊方法,也可以重寫特殊方法
class dog(animal):
def __init__(self,name,age):
# 希望可以直接呼叫父類的__init__來初始化父類中定義的屬性
# super() 可以用來獲取當前類的父類,
# 並且通過super()返回物件呼叫父類方法時,不需要傳遞self
super().__init__(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 = name
d = dog('旺財',18)
print(d.name)
print(d.age)
多重繼承
class a(object):
def test(self):
print('aaa')
class b(object):
def test(self):
print('b中的test()方法~~')
def test2(self):
print('bbb')
在python中是支援多重繼承的,也就是我們可以為乙個類同時指定多個父類
可以在類名的()後邊新增多個類,來實現多重繼承
多重繼承,會使子類同時擁有多個父類,並且會獲取到所有父類中的方法
在開發中沒有特殊的情況,應該盡量避免使用多重繼承,因為多重繼承會讓我們的**過於複雜
如果多個父類中有同名的方法,則會現在第乙個父類中尋找,然後找第二個,然後找第三個。。。
前邊父類的方法會覆蓋後邊父類的方法
class c(a,b):
pass
類名.__bases__ 這個屬性可以用來獲取當前類的所有父類
print(c.__bases__) # (, )
c = c()
c.test()
重寫
如果在子類中如果有和父類同名的方法,則通過子類例項去呼叫方法時,
會呼叫子類的方法而不是父類的方法,這個特點我們成為叫做方法的重寫(覆蓋,override)
建立dog類的例項
class dog(animal):
def bark(self):
print('汪汪汪~~~')
def run(self):
print('狗跑~~~~')
d = dog()
d.run() # 呼叫子類中的方法
當我們呼叫乙個物件的方法時,
會優先去當前物件中尋找是否具有該方法,如果有則直接呼叫
如果沒有,則去當前物件的父類中尋找,如果父類中有則直接呼叫父類中的方法,
如果沒有,則去父類的父類中尋找,以此類推,直到找到object,如果依然沒有找到,則報錯
class a(object):
def test(self):
print('aaa')
class b(a):
def test(self):
#print('bbb')
pass
class c(b):
def test(self):
# print('ccc')
pass
# 建立乙個c的例項
c = c()
c.test()
python 繼承 多繼承與方法重寫(二)
class person def init self,name,age,weight self.name name self.age age self.weight weight def talk self print s is talking i am d 歲 體重是 d 了 self.name,...
python重寫 python的繼承和重寫
class classname baseclasslist 類的幫助資訊 staement 類體 classname 用於指定類名 baseclasslist 用於指定要繼承的基類 也就是父類 可以有多個,類名之間用逗號分隔 類的幫助資訊 用於指定類的文件字串,定義該字串後,在建立類的物件時,輸入類...
關於繼承與重寫
header content type text html charset utf 8 繼承,它是指建立乙個新的派生類,從乙個或多個先前定義的類中繼承資料和函式,而且可以重新定義或加進新資料和函式,從而建立了類的層次或等級。說的簡單點就是,繼承性是子類自動共享父類資料結構和方法的機制,在軟體開發中,...