11
A
回答
14
雖然它並不少見people using NotImplementedError
,有些人會認爲「正確」的方式做到這一點(因爲Python 2.6)使用抽象基類,通過abc
module:
from abc import ABCMeta, abstractmethod
class MyAbstractClass(object):
__metaclass__=ABCMeta
@abstractmethod
def my_abstract_method():
pass
使用abc
比使用NotImplementedError
有兩個主要(潛在的)優勢。
首先,你將不能夠實例化抽象類(無需__init__
黑客):
>>> MyAbstractClass()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class MyAbstractClass with abstract methods my_abstract_method
其次,你將不能夠實例化沒有實現所有抽象的任何子類方法:
>>> class MyConcreteClass(MyAbstractClass):
... pass
...
>>> MyConcreteClass()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't instantiate abstract class MyConcreteClass with abstract methods my_abstract_method
相關問題
- 1. C++純虛方法
- 2. C++用純虛方法覆蓋純虛方法
- 3. 未實現純虛方法
- 4. 在線程中調用純虛方法
- 5. 使用/不使用虛擬方法實現純虛擬方法?
- 6. 返回const引用的純虛方法
- 7. 帶空虛的虛擬方法和純虛擬方法有什麼區別?
- 8. 純虛方法調用 - 交叉編譯
- 9. 純虛擬方法調用,終止
- 10. 錯誤:純虛方法稱爲
- 11. C++從與同一純虛方法
- 12. C++臨時 - 「純虛方法調用」
- 13. 用純虛擬方法克隆C++類
- 14. 純虛擬方法VS.函數指針
- 15. 混合純虛擬和虛擬方法的類
- 16. 純虛擬方法覆蓋(規則)虛擬方法的效果如何?
- 17. 在具體類的線程中調用的純虛方法
- 18. 如果類也有非虛擬方法,嘲弄純虛擬方法?
- 19. C++中的抽象類和純虛擬方法
- 20. 我可以重載基類中的純虛方法嗎?
- 21. 什麼是UML中的純虛擬方法?
- 22. Cython中的抽象類(使用純虛擬方法)
- 23. 最佳做法:純虛擬方法的缺省參數
- 24. 模板類中是否允許純虛擬方法?
- 25. 使用方法聲明純虛在派生類中
- 26. Python和純虛函數錯誤
- 27. 使用Boost封裝純虛函數:: Python
- 28. 純虛類C++
- 29. 純虛函數
- 30. 純虛函數