繼承有兩種用途:
一:繼承基類的方法,并且做出自己的改變或者擴(kuò)展(代碼重用)
二:聲明某個(gè)子類兼容于某基類,定義一個(gè)接口類Interface,接口類中定義了一些接口名(就是函數(shù)名)且并未實(shí)現(xiàn)接口的功能,子類繼承接口類,并且實(shí)現(xiàn)接口中的功能.
實(shí)踐中,繼承的第一種含義意義并不很大,甚至常常是有害的。因?yàn)樗沟米宇惻c基類出現(xiàn)強(qiáng)耦合。
繼承的第二種含義非常重要。它又叫“接口繼承”。
接口繼承實(shí)質(zhì)上是要求“做出一個(gè)良好的抽象,這個(gè)抽象規(guī)定了一個(gè)兼容接口,使得外部調(diào)用者無(wú)需關(guān)心具體細(xì)節(jié),可一視同仁的處理實(shí)現(xiàn)了特定接口的所有對(duì)象”——這在程序設(shè)計(jì)上,叫做歸一化。
1.做出良好的抽象類,2.規(guī)定兼容接口3.調(diào)用者可以無(wú)需關(guān)心具體實(shí)現(xiàn)細(xì)節(jié),可以一視同仁處理實(shí)現(xiàn)特定接口的所有對(duì)象。
#做出一個(gè)良好的抽象
classPayment(object):
#規(guī)定了一個(gè)兼容接口
defpay(self):
pass
#微信支付
classWeChatPay(object):
defpay(self,money):
print('微信支付了%s'%money)
#支付寶支付
classAliPay(object):
defpay(self,money):
print('支付寶支付了%s'%money)
#蘋(píng)果支付
classApplePay(object):
defpay(self,money):
print('蘋(píng)果支付了%s'%money)
defpay(obj,money):
obj.pay(money)
weixin=WeChatPay()
alipay=AliPay()
applepay=ApplePay()
#調(diào)用者無(wú)需關(guān)心具體實(shí)現(xiàn)細(xì)節(jié),可以一視同仁的處理實(shí)現(xiàn)了特定接口的所有對(duì)象
pay(weixin,100)
pay(alipay,200)
pay(applepay,300)
歸一化使得高層的外部使用者可以不加區(qū)分的處理所有接口兼容的對(duì)象集合——就好象linux的泛文件概念一樣,所有東西都可以當(dāng)文件處理,不必關(guān)心它是內(nèi)存、磁盤(pán)、網(wǎng)絡(luò)還是屏幕(當(dāng)然,對(duì)底層設(shè)計(jì)者,當(dāng)然也可以區(qū)分出“字符設(shè)備”和“塊設(shè)備”,然后做出針對(duì)性的設(shè)計(jì):細(xì)致到什么程度,視需求而定)。
1
2依賴倒置原則:
高層模塊不應(yīng)該依賴低層模塊,二者都應(yīng)該依賴其抽象;抽象不應(yīng)該應(yīng)該依賴細(xì)節(jié);細(xì)節(jié)應(yīng)該依賴抽象。換言之,要針對(duì)接口編程,而不是針對(duì)實(shí)現(xiàn)編程
以上內(nèi)容為大家介紹了Python抽象類和接口類,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。