python學習筆記 繼承與重寫

2022-06-25 08:36:14 字數 3325 閱讀 9520

繼承

定義乙個類 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 繼承,它是指建立乙個新的派生類,從乙個或多個先前定義的類中繼承資料和函式,而且可以重新定義或加進新資料和函式,從而建立了類的層次或等級。說的簡單點就是,繼承性是子類自動共享父類資料結構和方法的機制,在軟體開發中,...