Python抽象類別(abc模組)

來源:互聯網
上載者:User

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 six @six.add_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)
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.