如何使用abc创建抽象类而不使用抽象方法?

时间:2017-10-13 09:05:55

标签: python abstract-class

使用abc,我可以使用以下命令创建抽象类:

from abc import ABC, abstractmethod
class A(ABC):
    @abstractmethod
    def foo(self):
        print('foo')
class B(A):
    pass

obj = B()

这会失败,因为B尚未定义方法foo。 这模仿了Java中的抽象方法功能。

我想知道Python中是否也存在抽象类功能,其中在没有任何抽象方法的情况下防止了类的实例化。

2 个答案:

答案 0 :(得分:0)

是的。您可以。

  • 如果您不想强制执行方法:

仅从ABC继承,但不必担心方法抽象,因此不需要在其子类中实现。

  • 如果您要抽象类强制实施所有方法,请执行以下操作:

装饰所有方法。

  • 如果要强制实施不属于ABC的方法,则:

在方法中提高NotImplementedError。这不会阻止实例化,但是会阻止用法。但是,如果要在实例化中阻止它​​,则应该使用ABC。

您也可以delcare __init__abstractmethod,但是通常这对我来说不是很有用。

答案 1 :(得分:-1)

在Python中创建抽象类的传统方法是引发内置异常NotImplementedError

class A(object):
    def __init__(self):
        raise NotImplementedError('abstract base class')

class B(A):
    def __init__(self):
        # don't call A.__init__ here.
        pass

b = B()
# a = A()  # This will fail.