【发布时间】:2011-11-04 00:18:45
【问题描述】:
我已阅读有关抽象基类的 python 文档:
来自here:
abc.abstractmethod(function)指示抽象方法的装饰器。使用这个装饰器需要类的元类是
ABCMeta或 来源于它。具有从ABCMeta派生的元类的类 除非它的所有抽象方法和 属性被覆盖。
还有here
您可以将
@abstractmethod装饰器应用于draw()等方法 必须执行;然后 Python 将引发异常 没有定义方法的类。请注意,该例外仅 当您实际尝试创建子类的实例时引发 缺少方法。
我已经使用此代码进行了测试:
import abc
class AbstractClass(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def abstractMethod(self):
return
class ConcreteClass(AbstractClass):
def __init__(self):
self.me = "me"
c = ConcreteClass()
c.abstractMethod()
代码运行良好,所以我不明白。如果我输入 c.abstractMethod 我会得到:
<bound method ConcreteClass.abstractMethod of <__main__.ConcreteClass object at 0x7f694da1c3d0>>
我在这里缺少什么? ConcreteClass 必须实现抽象方法,但我没有例外。
【问题讨论】:
-
哪个 Python?它报告错误对我来说很好。此外,您始终可以引发 NotImplementedError 而不是使用
abc。 -
我在 mouad 答案上发表了评论,来自
python的链接默认设置为python3。我会记住提出异常,因为在 python 上编写具有这些更改的可移植代码似乎与我的 python 知识相去甚远。
标签: python abc abstract-methods