【发布时间】:2018-03-01 14:17:37
【问题描述】:
我正在阅读官方pythondocumentation。
在提到的链接中,第二行指出:
使用这个装饰器需要类的元类是 ABCMeta 或 来源于它。
但是,我成功地定义了以下给定的类。
from abc import abstractmethod
class A(object):
def __init__(self):
self.a = 5
@abstractmethod
def f(self):
return self.a
a = A()
a.f()
所以,上面的代码运行良好。 而且,我能够创建一个子类
class B(A):
def __init__(self):
super(B, self).__init__()
b = B()
b.f()
不覆盖上面定义的抽象方法。
那么,这基本上是否意味着如果我的基类的metaclass 不是ABCMeta(或从它派生),即使我有一个抽象方法,该类的行为也不像抽象类?
也就是说,文档需要更加清晰?
或者,这种行为是否有用,我没有抓住重点。
【问题讨论】:
-
您期望它如何工作?我认为文档很清楚。另外,我想说,这里不是讨论文档问题的地方。
-
我希望
Using this decorator requires that the class’s metaclass is ABCMeta or is derived from it.被强制执行? -
@harman786 问题是 Python 中强制执行此类操作的唯一方法是使用元类。这是 Catch-22。
标签: python abstract-class abstract-methods