Python中的抽象方法继承

时间:2014-05-20 19:57:29

标签: python inheritance abstract abc

假设我们有一个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)不允许继承抽象方法而不将它们重新实现为抽象...

1 个答案:

答案 0 :(得分:2)

你几乎得到了所有的代码,你可以随时测试它,看它是否有效...但作为扰流板,你的设计很好,只要C.test_attribute被{{1}装饰}}

如果您尝试创建property的实例,那么您将遇到问题,因为尚未创建整个抽象接口,但可以将其创建为{{1}的基类(以后可能是其他类......)

e.g:

B