【发布时间】:2010-11-12 04:19:49
【问题描述】:
在 Python 2.x 中,当你想将一个方法标记为抽象时,你可以这样定义它:
class Base:
def foo(self):
raise NotImplementedError("Subclasses should implement this!")
然后,如果您忘记覆盖它,您会得到一个很好的提醒异常。是否有等效的方法将字段标记为抽象?还是在类文档字符串中说明所有你能做的?
起初我以为我可以将该字段设置为 NotImplemented,但当我查看它的实际用途(丰富的比较)时,它似乎是滥用。
【问题讨论】:
-
它仍然有效,即使它最初的意图是进行丰富的比较。它有什么问题?
-
第一个问题是您可以从对象 (myvar = Base.field) 中读取字段,接下来您知道整个地方都有 NotImplementeds,直到其他部分尝试使用它并获得神秘的 AttributeError。
-
第二个问题是 IMO 它妨碍了可读性(“那个丰富的比较在那里做了什么?我错过了什么吗?)Evan 的解决方案以一种熟悉的方式准确地表达了正在发生的事情。
-
@Kiv:请不要评论您的问题。请根据您提出的具体观点更新您的问题。
标签: python abstract-class