python 抽象類的使用詳解
今天給大傢介紹一下python中一個強大的功能:抽象類
因為最近發現很多同事不理解抽象類,正好抽空寫篇博客,給大傢介紹一下抽象類
抽象類的作用就是控制子類的方法的名稱,要求子類必須按照父類的要求的實現指定的方法,且方法名要和父類保持一致
一、問題描述
主要使用場景是這樣的
比如京東上買東西,買完東西後需要支付,京東可以使用支付寶進行支付,也可以通過微信支付,也可以通過京東白條支付,也可以通過apppay支付,
每種支付需要走內部的流程。
支付的統一入口是京東,但是點擊不同的支付,需要走不同的流程,京東這邊的流程就需要調用不同的函數;
那統一入口這裡的調用起來就會比較麻煩
class Ali(object): def alipay(self): pass class Ten(object): def tenpay(self): pass class App(object): def apppay(self): pass
都是一個支付,阿裡的支付、騰訊的支付、蘋果的支付方法名都不一樣
二、解決辦法
此時我們就可以引入python中的抽線類
首先需要引入2個模塊
from abc import ABCMeta from abc import abstractmethod
然後實現如下代碼
from abc import ABCMeta from abc import abstractmethod # Payclass就是一個抽象類 class Payclass(metaclass=ABCMeta): @abstractmethod def pay(self): pass class Ali(Payclass): def alipay(self,money): print("使用阿裡支付{money}".format(money = money)) # # 如果想使用抽象類,則隻需要繼承這個抽象類就可以瞭 class Ten(Payclass): def tenpay(self,money): print("使用微信支付{money}".format(money = money)) class App(Payclass): def apppay(self,money): print("使用蘋果支付{money}".format(money = money))
比如我們沒有按照要求實例化pay這個方法,執行代碼會拋錯
wec = Ten()
那我們就按照要求修改代碼即可,這次實例化就不會拋錯
from abc import ABCMeta from abc import abstractmethod # Payclass就是一個抽象類 class Payclass(metaclass=ABCMeta): @abstractmethod def pay(self): pass class Ali(Payclass): def pay(self,money): print("使用阿裡支付{money}".format(money = money)) # # 如果想使用抽象類,則隻需要繼承這個抽象類就可以瞭 class Ten(Payclass): def pay(self,money): print("使用微信支付{money}".format(money = money)) class App(Payclass): def pay(self,money): print("使用蘋果支付{money}".format(money = money)) wec = Ten()
然後我們可以在定義一個函數,搭配抽線類來實現,這個的第一個參數就是每個支付的實例,另外一個參數就是每個支付需要的參數
def pay(obj,*args,**kwargs): obj.pay(*args,**kwargs)
整體的代碼如下,在調整一下參數,整體的代碼如下
from abc import ABCMeta from abc import abstractmethod # Payclass就是一個抽象類 class Payclass(metaclass=ABCMeta): @abstractmethod def pay(self): pass class Ali(Payclass): def pay(self,*args,**kwargs): print("使用阿裡支付{money}".format(money = args[0])) # # 如果想使用抽象類,則隻需要繼承這個抽象類就可以瞭 class Ten(Payclass): def pay(self,*args,**kwargs): print("使用微信支付{money}".format(money = args[0])) class App(Payclass): def pay(self,*args,**kwargs): print("使用蘋果支付{money}".format(money = args[0])) wec = Ten() app = App() def pay(obj,*args,**kwargs): obj.pay(*args,**kwargs) pay(app,"100")
執行結果如下
三、使用抽象類的註意事項
1、抽象類不能被實例化
2、子類需要嚴格遵守父類的抽象類的規則,而孫類不需要遵守這個規則
3、如果想使用抽象類,則該類隻需要繼承抽象類即可
以上就是python 抽象類的使用詳解的詳細內容,更多關於python 抽象類的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- python工廠方法模式原理與實現
- python 多態 協議 鴨子類型詳解
- 關於Python 多重繼承時metaclass conflict問題解決與原理探究
- Python設計模式中的創建型工廠模式
- 寫好Python代碼的幾條重要技巧