多型指的是⼀類事物有多種形態,(⼀個抽象類有多個⼦類,因⽽多型的概念依賴於繼承)。
定義:多型是⼀種使⽤物件的⽅式,⼦類重寫⽗類⽅法,調⽤不同⼦類物件的相同⽗類⽅法,可以產⽣不同的執⾏結果
好處:調⽤靈活,有了多型,更容易編寫出通⽤的**,做出通⽤的程式設計,以適應需求的不斷變化!
實現步驟:
class dog(object):
def work(self): # ⽗類提供統⼀的⽅法,哪怕是空⽅法
print('指哪打哪...')
class armydog(dog): # 繼承dog類
def work(self): # ⼦類重寫⽗類同名⽅法
print('追擊敵⼈...')
class drugdog(dog):
def work(self):
print('追查毒品...')
class person(object):
def work_with_dog(self, dog): # 傳⼊不同的物件,執⾏不同的**,即不同的work函式
dog.work()
ad = armydog()
dd = drugdog()
daqiu = person()
daqiu.work_with_dog(ad)
daqiu.work_with_dog(dd)
類屬性就是
類物件
所擁有的屬性,它被
該類的所有例項物件 所共有。
類屬性可以使⽤
類物件
或 例項物件
訪問。
class dog(object):
tooth = 10
wangcai = dog()
xiaohei = dog()
print(dog.tooth) # 10
print(wangcai.tooth) # 10
print(xiaohei.tooth) # 10
類屬性的優點
記錄的某項資料 始終保持⼀致時
,則定義類屬性。
例項屬性
要求 每個物件
為其 單獨開闢⼀份記憶體空間
來記錄資料,⽽
類屬性
為全類所共有,僅佔⽤⼀份記憶體
,更加節省記憶體空間
。 類屬性只能通過類物件修改,不能通過例項物件修改,如果通過例項物件修改類屬性,表示的是建立了⼀個例項屬性。
class dog(object):
tooth = 10
wangcai = dog()
xiaohei = dog()
# 修改類屬性
dog.tooth = 12
print(dog.tooth) # 12
print(wangcai.tooth) # 12
print(xiaohei.tooth) # 12
# 不能通過物件修改屬性,如果這樣操作,實則是建立了⼀個例項屬性
wangcai.tooth = 20
print(dog.tooth) # 12
print(wangcai.tooth) # 20
print(xiaohei.tooth) # 12
class dog(object):
def __init__(self):
self.age = 5
def info_print(self):
print(self.age)
wangcai = dog()
print(wangcai.age) # 5
# print(dog.age) # 報錯:例項屬性不能通過類訪問
wangcai.info_print() # 5
需要⽤裝飾器
@classmethod
來標識其為類⽅法,對於類⽅法,
第⼀個引數必須是類物件
,⼀般以 cls 作為第⼀個引數。
當⽅法中
需要使⽤類物件
(如訪問私有類屬性等
)時,定義類⽅法
類⽅法⼀般和類屬性配合使⽤
class dog(object):
__tooth = 10
@classmethod
def get_tooth(cls):
return cls.__tooth
wangcai = dog()
result = wangcai.get_tooth()
print(result) # 10
需要通過裝飾器
@staticmethod
來進⾏修飾,
靜態⽅法既不需要傳遞類物件也不需要傳遞例項物件(形參沒有self/cls
)。 靜態⽅法 也能夠通過
例項物件
和 類物件
去訪問。
當⽅法中
既不需要使⽤例項物件
(如例項物件,例項屬性),
也不需要使⽤類物件
(如類屬性、類⽅法、建立例項等)
時,定義靜態⽅法
取消不需要的引數傳遞
,有利於
減少不必要的記憶體佔⽤和效能消耗
class dog(object):
@staticmethod
def info_print():
print('這是⼀個狗類,⽤於建立狗例項....')
wangcai = dog()
# 靜態⽅法既可以使⽤物件訪問⼜可以使⽤類訪問
wangcai.info_print()
dog.info_print()
執行結果:
⾯向物件三⼤特性
類屬性
例項屬性
類⽅法
@classmethod
def xx():
**
靜態⽅法
@staticmethod
def xx():
**
Python物件導向 多型
什麼是多型?多型就是一種事物有多種形態,比如說動物,有 貓 狗 老鼠 獅子 大象等。多型的好處 比如我們在新建立類時我們可以繼承動物類,動物類中的方法可以重寫,也可以不重寫,當我們新增時,只是新增乙個animals類而不需要再去修改父類 裡的內容,只需要呼叫就可以了。多型的最基本的實現就是通過繼承來...
python物件導向之封裝 繼承和多型
類似於模板,把事物共有的特徵和行為進行打包,然後建立出來的物件就會具有這些特徵和行為。1.封裝資料的主要原因是 保護隱私 和 隔離複雜度 2.類的結構 class 類名 object 類名的命名規則 大駝峰命名法 每個單詞首字母大寫,單詞之間沒有下劃線 類屬性 屬性名 值 類方法 classmeth...
物件導向多型之介面
介面就是乙個規範,能力 可以實現某乙個功能 語法 public inte ce i.able 成員 介面中的成員不允許新增訪問修飾符,預設就是 public 類中預設是 private 不允許寫具有方法體的函式,不能包含字段 欄位是存資料用的 可以包含自動屬性 介面中只能有方法 方法 屬性 索引器 ...