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