Python抽象類的新寫法
記得之前l(fā)earn python一書里面,因為當時沒有官方支持,只能通過hack的方式實現(xiàn)抽象方法,具體如下 最簡單的寫法
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 "<interactive input>", line 1, in <module> File "<clipboard>", line 3, in foo Exception: ('no implement exception', 'foo method need implement')
這就是2.7之前的寫法了,2.7給了我們新的支持方法!abc模塊(abstruct base class),這個在py3k中已經(jīng)實現(xiàn),算是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 "<interactive input>", line 1, in <module> TypeError: Can't instantiate abstract class C with abstract methods bar >>>
相關文章
為何人工智能(AI)首選Python?讀完這篇文章你就知道了(推薦)
這篇文章主要介紹了為何人工智能(AI)首選Python,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-04-04對python中不同模塊(函數(shù)、類、變量)的調用詳解
今天小編就為大家分享一篇對python中不同模塊(函數(shù)、類、變量)的調用詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07淺談Python函數(shù)式編程的返回函數(shù)與匿名函數(shù)
這篇文章主要介紹了淺談Python函數(shù)式編程的返回函數(shù)與匿名函數(shù),如果一個變量指向了一個函數(shù),那么,可以通過該變量來調用這個函數(shù),需要的朋友可以參考下2023-04-04Python面向對象程序設計之類和對象、實例變量、類變量用法分析
這篇文章主要介紹了Python面向對象程序設計之類和對象、實例變量、類變量用法,結合實例形式分析了Python面向對象程序設計中類和對象、實例變量、類變量具體功能、原理、使用方法與操作注意事項,需要的朋友可以參考下2020-03-03pytorch中.to(device) 和.cuda()的區(qū)別說明
這篇文章主要介紹了pytorch中.to(device) 和.cuda()的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-05-05