您現在的位置是:網站首頁> 內容頁

Python抽象類(abc模塊)

  • 皇家88登錄手機版
  • 2019-10-28
  • 74人已閱讀
簡介1.抽象類概念抽象類是一個特殊的類,只能被繼承,不能實例化2.為什么要有抽象類其實在未接觸抽象類概念時,我們可以構造香蕉、蘋果、梨之類的類,然后讓它們繼承水果這個的基類,水果的基類包含

1.抽象類概念

抽象類是一個特殊的類,只能被繼承,不能實例化

2.為什么要有抽象類

其實在未接觸抽象類概念時,我們可以構造香蕉、蘋果、梨之類的類,然后讓它們繼承水果這個的基類,水果的基類包含一個eat函數。

但是你有沒有想過,我們可以將香蕉、蘋果、梨實例化,去吃香蕉、蘋果、梨。但是我們卻不能將水果實例化,因為我們無法吃到叫水果的這個東西。

所以抽象類中只能有抽象方法(沒有實現功能),該類不能被實例化,只能被繼承,且子類必須實現抽象方法。

3.抽象類的作用

在不同的模塊中通過抽象基類來調用,可以用最精簡的方式展示出代碼之間的邏輯關系,讓模塊之間的依賴清晰簡單。

抽象類的編程,讓每個人可以關注當前抽象類的方法和描述,而不需要考慮過多的實現細節,這對協同開發有很大意義,也讓代碼可讀性更高。

4.抽象類的使用

import abc # 利用abc模塊實現抽象類class File(metaclass=abc.ABCMeta): # abc.ABCMeta是實現抽象類的一個基礎類 @abc.abstractmethod # 定義抽象方法,無需實現功能 def read(self): passclass Txt(File): # 子類繼承抽象類,但是必須定義read方法將抽象類中的read方法覆蓋 def read(self): print("文本數據的讀取方法")txt1 = Txt()txt1.read() txt2 = File()txt2.read()

運行結果如下

文本數據的讀取方法Traceback (most recent call last): File "E:/python/ftp_work/test.py", line 20, in <module> txt2 = File()TypeError: Can"t instantiate abstract class File with abstract methods read

顯然將抽象類實例化報錯了,得到了我們想要的結果

5.abc模塊在Python2&3的兼容問題

為解決兼容性問題,我們需要引入six模塊

通用做法。@six.add_metaclass(MetaClass) 的作用是在不同版本的Python之間提供一個優雅的聲明類的metaclass的手段,事實上不用它也可以,只是使用了它代碼更為整潔明了。import [email protected]_metaclass(Meta)class MyClass(object):????pass
在Python 3 等價于import six?class MyClass(object, metaclass = Meta):????pass
在Python 2.x (x >= 6)中等價于import six?class MyClass(object):????__metaclass__ = Meta????pass
或者直接調用裝飾器,這里也能看出來裝飾器就是個方法包裝而已。import six?class MyClass(object):????passMyClass??= six.add_metaclass(Meta)(MyClass)

文章評論

Top 丰合棋牌app下载
武汉麻将七皮四赖 模拟射击 e球彩玩法介绍 甘肃快3开奖结果一定牛 秒速赛车的漏洞是什 亿海配资 什么原因导致股票下 辉煌棋牌官网版 太原立四麻将免费下 三分pk拾官网开奖结果 游玩广西棋牌挂 3d试机号今天开机 疯狂飞艇如何看走势图 941汇配资 在线教育股票有哪些 斗牛棋牌怎么玩的图