新聞中心
本篇文章要說(shuō)的類很有意思,叫接口類,這個(gè)名字相信小伙伴們還是比較容易記住的。小編想通過(guò)接口類給大家?guī)?lái)有趣的操作,畢竟一直學(xué)函數(shù)和代碼,確實(shí)是一件需要記憶讓人疲憊的事情。希望下面小編帶來(lái)的例子,能讓大家在運(yùn)行代碼的過(guò)程中,找到學(xué)習(xí)接口類的快樂(lè)。

創(chuàng)新互聯(lián)建站長(zhǎng)期為上千家客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊(duì)從業(yè)經(jīng)驗(yàn)10年,關(guān)注不同地域、不同群體,并針對(duì)不同對(duì)象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺(tái),與合作伙伴共同營(yíng)造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為金水企業(yè)提供專業(yè)的網(wǎng)站設(shè)計(jì)制作、網(wǎng)站設(shè)計(jì),金水網(wǎng)站改版等技術(shù)服務(wù)。擁有10多年豐富建站經(jīng)驗(yàn)和眾多成功案例,為您定制開發(fā)。
我們來(lái)看一段代碼去了解為什么需要接口類
class Alipay:
def pay(self,money):
print('支付寶支付了')
class Apppay:
def pay(self,money):
print('蘋果支付了')
class Weicht:
def pay(self,money):
print('微信支付了')
def pay(payment,money): # 支付函數(shù),總體負(fù)責(zé)支付,對(duì)應(yīng)支付的對(duì)象和要支付的金額
payment.pay(money)
p=Alipay()
pay(p,200) #支付寶支付了
這段代碼,實(shí)現(xiàn)了一個(gè)有趣的功能,就是通過(guò)一個(gè)總體的支付函數(shù),實(shí)現(xiàn)了不同種類的支付方式,不同是支付方式作為對(duì)象,傳入函數(shù)中
但是開發(fā)中容易出現(xiàn)一些問(wèn)題,那就是類中的函數(shù)名不一致,就會(huì)導(dǎo)致調(diào)用的時(shí)候找不到類中對(duì)應(yīng)方法,例題如下:
class Alipay:
def paying(self,money): #這里類的方法可能由于程序員的疏忽,寫的不是一致的pay,導(dǎo)致后面調(diào)用的時(shí)候找不到pay
print('支付寶支付了')
class Apppay:
def pay(self,money):
print('蘋果支付了')
class Weicht:
def pay(self,money):
print('微信支付了')
def pay(payment,money): # 支付函數(shù),總體負(fù)責(zé)支付,對(duì)應(yīng)支付的對(duì)象和要支付的金額
payment.pay(money)
p=Alipay() #不報(bào)錯(cuò)
pay(p,200) #調(diào)用執(zhí)行就會(huì)報(bào)錯(cuò),'Alipay' object has no attribute 'pay'
這時(shí)候怎么辦呢?可以手動(dòng)拋異常:NotImplementedError來(lái)解決開發(fā)中遇到的問(wèn)題
class payment:
def pay(self):
raise NotImplementedError #手動(dòng)拋異常
class Alipay:
def paying(self, money): # 這里類的方法不是一致的pay,導(dǎo)致后面調(diào)用的時(shí)候找不到pay
print('支付寶支付了')
def pay(payment, money): # 支付函數(shù),總體負(fù)責(zé)支付,對(duì)應(yīng)支付的對(duì)象和要支付的金額
payment.pay(money)
p = Alipay() # 不報(bào)錯(cuò)
pay(p, 200) #調(diào)用的時(shí)候才會(huì)報(bào)錯(cuò) 'Alipay' object has no attribute 'pay'
也可以借用abc模塊來(lái)處理這種錯(cuò)誤
from abc import abstractmethod, ABCMeta #接口類中定義了一些接口名:Pay,且并未實(shí)現(xiàn)接口的功能,子類繼承接口類,并且實(shí)現(xiàn)接口中的功能
class Payment(metaclass=ABCMeta): #抽象出的共同功能Pay
@abstractmethod
def pay(self,money):pass #這里面的pay 來(lái)源于下面類中的方法pay,意思把這個(gè)方法規(guī)范為統(tǒng)一的標(biāo)準(zhǔn),另外建一個(gè)規(guī)范類Payment
class Alipay(Payment):
def paying(self, money): #這里出現(xiàn)paying和我們規(guī)范的pay不一樣,那么在實(shí)例化 Alipay的時(shí)候就會(huì)報(bào)錯(cuò)
print('支付寶支付了')
class Weicht(Payment):
def pay(self,money):
print('微信支付了')
def pay(pay_obj,money):
pay_obj.pay(money)
p=Alipay() #實(shí)例化的時(shí)候就會(huì)報(bào)錯(cuò) Can't instantiate abstract class Alipay with abstract methods pay 之前兩個(gè)例子都是在執(zhí)行的時(shí)候報(bào)錯(cuò),這里不一樣的是實(shí)例化就會(huì)知道是哪里發(fā)生錯(cuò)誤了
總結(jié):用abc模塊裝飾后,在實(shí)例化的時(shí)候就會(huì)報(bào)錯(cuò),那么當(dāng)我們代碼很長(zhǎng)的時(shí)候,就可以早一點(diǎn)預(yù)知錯(cuò)誤,所以以后在接口類類似問(wèn)題中用這個(gè)模塊
接口繼承實(shí)質(zhì)上是要求“做出一個(gè)良好的抽象,這個(gè)抽象規(guī)定了一個(gè)兼容接口,使得外部調(diào)用者無(wú)需關(guān)心具體細(xì)節(jié),
可一視同仁的處理實(shí)現(xiàn)了特定接口的所有對(duì)象”——這在程序設(shè)計(jì)上,叫做歸一化。
以上就是python3接口類的一些好玩的例子,是不是覺(jué)得學(xué)python也是非常開心的事情呢~小編會(huì)不定期搜集有趣的例子分享給大家。
網(wǎng)站名稱:創(chuàng)新互聯(lián)Python教程:python3中的接口類是什么?怎么用?
URL鏈接:http://m.5511xx.com/article/djojjee.html


咨詢
建站咨詢
