【发布时间】:2011-06-15 12:35:53
【问题描述】:
Abstract base classes can still be handy in Python. 在编写一个抽象基类时,我希望每个子类都有一个spam() 方法,我想写这样的东西:
class Abstract(object):
def spam(self):
raise NotImplementedError
挑战来自还想使用super(),并通过将其包含在整个子类链中来正确地做到这一点。在这种情况下,似乎我必须像下面这样包装每个 super 调用:
class Useful(Abstract):
def spam(self):
try:
super(Useful, self).spam()
except NotImplementedError, e:
pass
print("It's okay.")
对于一个简单的子类来说还可以,但是当编写一个有很多方法的类时,try-except 的事情变得有点麻烦,而且有点难看。有没有更优雅的从抽象基类子类化的方式?我只是做错了吗?
【问题讨论】:
-
这没什么意义。您应该知道实现了哪些超类方法(对于哪些
super有意义),哪些没有实现,因为它们是抽象的。您可以阅读源代码。 -
raise SyntaxError也是该语言。问题是“当简单检查抽象类就可以省去编写所有代码时,为什么还要编写所有代码”? -
@S.Lott 啊,现在明白了。顺便说一句,您应该将其作为答案提交,因为它是。
标签: python abstract-class super