溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python3中如何使用接口類

發布時間:2020-11-17 09:21:41 來源:億速云 閱讀:211 作者:小新 欄目:編程語言

了解python3中如何使用接口類?這個問題可能是我們日常學習或工作經常見到的。希望通過這個問題能讓你收獲頗深。下面是小編給大家帶來的參考內容,讓我們一起來看看吧!

我們來看一段代碼去了解為什么需要接口類

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):       # 支付函數,總體負責支付,對應支付的對象和要支付的金額
    payment.pay(money)
p=Alipay()
pay(p,200)      #支付寶支付了

這段代碼,實現了一個有趣的功能,就是通過一個總體的支付函數,實現了不同種類的支付方式,不同是支付方式作為對象,傳入函數中

但是開發中容易出現一些問題,那就是類中的函數名不一致,就會導致調用的時候找不到類中對應方法,例題如下:

class Alipay:
    def paying(self,money):    #這里類的方法可能由于程序員的疏忽,寫的不是一致的pay,導致后面調用的時候找不到pay
        print('支付寶支付了')
class Apppay:
    def pay(self,money):
        print('蘋果支付了')
class Weicht:
    def pay(self,money):
        print('微信支付了')
def pay(payment,money):       # 支付函數,總體負責支付,對應支付的對象和要支付的金額
    payment.pay(money)
p=Alipay()   #不報錯
pay(p,200)      #調用執行就會報錯,'Alipay' object has no attribute 'pay'

這時候怎么辦呢?可以手動拋異常:NotImplementedError來解決開發中遇到的問題

class payment:
    def pay(self):
        raise NotImplementedError    #手動拋異常
class Alipay:
    def paying(self, money):  # 這里類的方法不是一致的pay,導致后面調用的時候找不到pay
        print('支付寶支付了')
def pay(payment, money):  # 支付函數,總體負責支付,對應支付的對象和要支付的金額
    payment.pay(money)
 
p = Alipay()  # 不報錯
pay(p, 200)  #調用的時候才會報錯  'Alipay' object has no attribute 'pay'

也可以借用abc模塊來處理這種錯誤

from abc import abstractmethod, ABCMeta     #接口類中定義了一些接口名:Pay,且并未實現接口的功能,子類繼承接口類,并且實現接口中的功能
class Payment(metaclass=ABCMeta):    #抽象出的共同功能Pay
    @abstractmethod
    def pay(self,money):pass    #這里面的pay 來源于下面類中的方法pay,意思把這個方法規范為統一的標準,另外建一個規范類Payment
class Alipay(Payment):
    def paying(self, money):    #這里出現paying和我們規范的pay不一樣,那么在實例化 Alipay的時候就會報錯
        print('支付寶支付了')
class Weicht(Payment):
    def pay(self,money):
        print('微信支付了')
def pay(pay_obj,money):
    pay_obj.pay(money)
p=Alipay()   #實例化的時候就會報錯  Can't instantiate abstract class Alipay with abstract methods pay 之前兩個例子都是在執行的時候報錯,這里不一樣的是實例化就會知道是哪里發生錯誤了

總結:用abc模塊裝飾后,在實例化的時候就會報錯,那么當我們代碼很長的時候,就可以早一點預知錯誤,所以以后在接口類類似問題中用這個模塊

接口繼承實質上是要求“做出一個良好的抽象,這個抽象規定了一個兼容接口,使得外部調用者無需關心具體細節,

可一視同仁的處理實現了特定接口的所有對象”——這在程序設計上,叫做歸一化。

感謝各位的閱讀!看完上述內容,你們對python3中如何使用接口類大概了解了嗎?希望文章內容對大家有所幫助。如果想了解更多相關文章內容,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女