[英]Abstract method inheritance in Python
假设我们有一个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)不允许继承抽象方法而不将它们重新实现为抽象...
你几乎得到了所有的代码,你可以随时测试它,看它是否有效...但作为扰流板,你的设计很好,只要C.test_attribute
被property
装饰。
如果您尝试创建B
的实例,那么您将遇到问题,因为尚未创建整个抽象接口,但可以将其创建为C
的基类(以后可能是其他类...)
例如:
import abc
class A(object):
__metaclass__ = abc.ABCMeta
@abc.abstractproperty
def foo(self):
pass
class B(A):
def bar(self):
return "bar"
class C(B):
@property
def foo(self):
return "foo"
print C().foo # foo
print C().bar() # bar
print B().foo # TypeError
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.