【发布时间】:2014-09-19 08:30:33
【问题描述】:
我有两个类继承自同一个父级P:
from abc import ABCMeta, abstractmethod
class P(object):
__metaclass__ = ABCMeta
@abstractmethod
def foo(self):
pass
class C(P):
pass
class D(tuple, P):
pass
唯一的区别是D继承自tuple和P,而C仅继承自P。
现在这是行为:c = C() 出现错误,正如预期的那样:
TypeError: Can't instantiate abstract class C with abstract methods foo
但是d = D() 可以正常工作!
我什至可以拨打d.foo()。我该如何解释这种行为?
【问题讨论】:
-
仅供参考,使用 Python 3 它们都可以很好地实例化。
-
大写字母类对你有用吗?您没有收到任何语法错误吗?
-
@Keith 是首选吗?为什么
abstractmethod不起作用? -
@Keith:那是因为在 Python 3 中你需要调整元类语法;
class P(metaclass=ABCMeta):。一旦你这样做了,你会在 Python 3 上看到同样的问题,C()会抛出异常,D()不会。 -
@tilaprimera 谢谢,我的错别字
标签: python abstract-class abc