什么是思想上正确的实施方式 纯虚方法 在Python?
只是提高 NotImplementedError
在方法?
或者,还有更好的方法?
谢谢!
什么是思想上正确的实施方式 纯虚方法 在Python?
只是提高 NotImplementedError
在方法?
或者,还有更好的方法?
谢谢!
虽然看起来并不罕见 人们使用 NotImplementedError
有些人会认为这样做的“正确”方法(因为python 2.6)正在使用 抽象基类通过 abc
模:
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