让我们定义一个名为Filter的类。我希望这个类被子类扩展,并且我希望所有这些子类都覆盖一个方法:job。
更具体地说
class Filter(object):
def __init__(self, csvin=None):
self._input = csvin
# I want this to be abstract. All the classes that inherit from Filter should
# implement their own version of job.
def job(self):
pass换句话说,我希望确保Filter的任何子类都有一个名为job的方法。
我听说了模块abc,但是我也读到了这些叫做鸭子类型和EAFP的概念。我的理解是,如果我是一只鸭子,我就试着跑。
f = SomeFilter()
f.job()看看能不能用。这是我的问题--如果这会引发任何异常,那么在编写类SomeFilter时,我应该更加小心。
我很肯定我并不完全理解鸭子类型和EAFP的含义,但是如果这意味着我必须尽可能晚地推迟调试(也就是说,在调用的时候),那么我不同意这种想法。我不明白为什么这么多人似乎欣赏这种EAFP哲学,但我希望成为他们的一部分。
有人能转换我,并解释如何以安全和预测的方式来实现这一点,即防止程序员在以的方式扩展Filter、时犯错误。
发布于 2014-03-27 00:07:10
你可以使用raise NotImplementedError,根据文件
class Filter(object):
def __init__(self, csvin=None):
self._input = csvin
# I want this to be abstract. All the classes that inherit from Filter should
# implement their own version of job.
def job(self):
raise NotImplementedErrorhttps://stackoverflow.com/questions/22675510
复制相似问题