抽象基类在 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 的事情就变得有点麻烦,而且有点难看。是否有更优雅的从抽象基类进行子类化的方法?我只是做错了吗?
你可以在 python 2.6+ 中使用以下命令干净地完成此操作abc模块:
import abc
class B(object):
__metaclass__ = abc.ABCMeta
@abc.abstractmethod
def foo(self):
print 'In B'
class C(B):
def foo(self):
super(C, self).foo()
print 'In C'
C().foo()
输出将是
In B
In C
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)