问题 Python中的纯虚方法


什么是思想上正确的实施方式 纯虚方法 在Python?

只是提高 NotImplementedError 在方法?

或者,还有更好的方法?

谢谢!


8900
2018-02-06 18:17


起源



答案:


虽然看起来并不罕见 人们使用 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

这是一个关于抽象基类的更完整的概述


14
2018-02-06 18:28