【发布时间】:2014-06-19 13:23:49
【问题描述】:
我正在尝试使用 Python 3 编写一个抽象类,如下所示:
from abc import *
class Base(metaclass=ABCMeta):
@abstractmethod
def __init__(self, text=''):
self._text = text
@property
@abstractmethod
def text(self):
return self._text
@text.setter
@abstractmethod
def text(self, text):
self._text = text
class SubClass(Base):
def __init__(self, text):
super().__init__(text)
@property
def text(self):
return super().text
q = SubClass("Test")
当我运行文件时,解释器不会抱怨 text.setter 没有实现。为什么没有错误?
【问题讨论】:
-
这是 Python 3 的哪个特定版本?
-
你不是在 text.setter 的抽象声明中提供了带有
self._text = text的基本实现吗?抽象类的继承将在子类不覆盖它的情况下为子类提供基本实现,至少在大多数 OO 语言中它是这样工作的。 -
@user2357112 Python 3.4
-
@RyanJ:通常,所有带有
abstractmethod的东西都需要被覆盖以实例化一个类。例如,即使在abstractmethod装饰器下为__init__提供了一个真实实现的函数,它仍然需要被覆盖。 -
啊,是的。我跳到了 abc 库的 python 文档,确实是这样。我没有那么新的 python 版本,所以我无法测试。
标签: python python-3.x properties abstract-methods