使用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中是否也存在抽象类功能,其中在没有任何抽象方法的情况下防止了类的实例化。
答案 0 :(得分:0)
是的。您可以。
仅从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.