多型的特性在於可重新改寫指定的繼承方法(包括修改 , 結合 , 重新封裝...),而本身繼承是有很多限制的(無法多向繼承 , 多調用),而用多型就可克服這些限制。所以也被看做繼承與封裝的變形。
OOP多型是一種設計程式的型態,它會直接在執行時做表達。但編譯多型是編譯器會把相關聯的程式做洗牌(結合),如此一來便能安全與高效能同時兼具。
變數多型在python裡較不常看到,但在c++裡可以用作指標(這裡就不介紹了)。因為python的變數比較偏向屬性方面,所以python就可把方法(函數)做多型應用。
結構:class.函數a.函數b......
就是個樹狀結構
多型就是在函數(方法)去做改寫
Ex:(多型的結合)
class mouse():
def price(self):
print("1000")
class keyboard():
def price(self):
print("5000")
d = [mouse(), keyboard()] #寫入陣列
for i in d:
#print(i.price()) #空物件None
i.price()
這就是萬般皆物件的印證,所以調用print()自然就沒有東西(None)
然而這只是最簡單的多型表達式,要學習完多型必須了解其他用法:
這是昨天繼承的程式碼:
class bank(object):
def __init__(self, acct , pwd):
self.acct = acct
self.pwd = pwd
def sss(self):
print(f'welcome~{self.acct}')
print(f'pwd is {self.pwd}')
#繼承
class DB(bank):
def code(self):
print(f'welcome~{self.acct}')
print(f'pwd is {self.pwd}')
這樣的程式碼不僅累贅,而且容易出錯。所以用super()就可將一個方法(函式內部) 可繼承的全部調用過來,減少打錯程式碼的機率。
class bank(object):
def __init__(self, acct , pwd):
self.acct = acct
self.pwd = pwd
def sss(self):
print(f'welcome~{self.acct}')
print(f'pwd is {self.pwd}')
#繼承
class DB(bank):
def code(self):
#print(f'welcome~{self.acct}')
#print(f'pwd is {self.pwd}')
super().sss()
==>當然super()可不只這樣,明天會介紹的MRO(繼承順序) 會常用到它