假设我们有一个 Python 类,它使用abc模块来定义一个抽象属性:
import abc
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractproperty
def test_attribute(self):
raise NotImplementedError
现在让我们考虑通过添加一个新方法 ( )来定义B
子类,以及实现最初在 中声明的抽象方法的子类:A
test_method()
C
B
A
class B(A):
def test_method(self):
pass
class C(B):
def test_attribute(self):
# Implement abstract attribute
pass
假设我想保持B
抽象(不可实例化),我应该重新定义抽象属性(test_attribute
)和元类赋值B
吗?A
或者从(如上面的代码中)继承它们就足够了吗?
我知道 Python 允许我不重新定义抽象方法,从而从父类继承它们。从理论软件工程的角度来看,这是否正确?
我这样问是因为如果我没记错的话,其他语言(例如 Java)不允许继承抽象方法而不将它们重新实现为抽象...