Python抽象類別的新寫法

來源:互聯網
上載者:User
記得之前learn python一書裡面,因為當時沒有官方支援,只能通過hack的方式實現抽象方法,具體如下 最簡單的寫法

class MyCls():  def foo(self):    print('method no implement')啟動並執行例子>>> a = MyCls()>>> a.foo()method no implement>>>

這樣雖然可以用,但是提示不明顯,還是容易誤用,當然,還有更好的方法 較為可以接受的寫法

class MyCls():  def foo(self):    raise Exception('no implement exception', 'foo method need implement')

一個簡單的用例

>>> a = MyCls()>>> a.foo()Traceback (most recent call last): File "", line 1, in  File "", line 3, in fooException: ('no implement exception', 'foo method need implement')

這就是2.7之前的寫法了,2.7給了我們新的支援方法!abc模組(abstruct base class),這個在py3k中已經實現,算是back port吧。

我們來看看新的寫法

from abc import ABCMeta from abc import ABCMeta,abstractmethod class Foo():  __metaclass__ = ABCMeta  @abstractmethod  def bar(self):    pass

運行效果

>>> class B(Foo):... def bar(self):... pass... >>> B()<__main__.B object at 0x02EE7B50>>>> B().bar()>>> class C(Foo):... pass... >>> C().bar()Traceback (most recent call last): File "", line 1, in TypeError: Can't instantiate abstract class C with abstract methods bar>>> 
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.