假设我们有一个Python类,它使用abc模块来定义抽象属性:
import abc
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractproperty
def test_attribute(self):
raise NotImplementedError
现在考虑通过添加新方法(B
)来定义A
来自test_method()
的子类,并C
来自{{1}的子类实现最初在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
继承它们(如上面的代码所示)?
我知道Python允许我不重新定义抽象方法,因此从父类继承它们。从理论软件工程的角度来看,这是正确的吗?
我这样问,因为如果我没有错,其他语言(例如Java)不允许继承抽象方法而不将它们重新实现为抽象...
答案 0 :(得分:2)
你几乎得到了所有的代码,你可以随时测试它,看它是否有效...但作为扰流板,你的设计很好,只要C.test_attribute
被{{1}装饰}}
如果您尝试创建property
的实例,那么您将遇到问题,因为尚未创建整个抽象接口,但可以将其创建为{{1}的基类(以后可能是其他类......)
e.g:
B