深入類和物件

2020-08-09 11:40:53

深入類和物件

鴨子型別和多型

鴨子型別:
  • 動態語言呼叫實體方法時不檢查型別,只要方法存在,參數正確,就可以呼叫,這就是動態語言的鴨子型別,並不要求嚴格的繼承體系,一個物件只要「看起來像鴨子,走路像鴨子」,就可以看做是鴨子。
a = [1,2]
b = [2,3]
c = (5,6)
d = "avd"
a.extend(b)
print(a)
a = [1,2]
a.extend(c)# extend()擴充套件方法
print(a)
a = [1,2]
a.extend(d)
print(a)

變數1.extend(變數2)函數表示擴充套件變數的值,將變數2中的值擴充套件到變數1中並且型別轉換成變數1的型別。
無返回值

# 執行結果如下
[1, 2, 2, 3]
[1, 2, 5, 6]
[1, 2, 'a', 'v', 'd']
  • 多型:定義時的型別和執行時的型別不一樣,就稱爲是多型。
class cat(object):
	def info(self):
		print('i am cat')
class dog(object):
	def info(self):
		print('i am dog')
class duck(object):
	def info(self):
		print('i am duck')
animal_list = [cat,dog,duck]
for animal in animal_list:
	animal().info()

鴨子型別在執行之前cat都是在[cat,dog,duck]列表的裏面被當作是變數,當執行的時候,只有加上()呼叫info()才明確cat是一個類

i am cat
i am dog
i am duck

抽象基礎類別(abc模組)

抽象基礎類別介紹

抽象基礎類別就是類裡定義了純虛成員函數的類,純虛擬函式只提供了介面,並沒有具體的實現,抽象基礎類別不能唄範例化(不能建立物件),通常是作爲基礎類別供子類繼承,子類中重寫虛擬函式,實現具體的介面。
抽象基礎類別就是定義各種方法而不做具體實現的類,任何繼承自抽象基礎類別的類必須實現這些方法,否則無法範例化。