首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以pythonic方式再现Java接口行为

如何以pythonic方式再现Java接口行为
EN

Stack Overflow用户
提问于 2014-03-26 23:51:54
回答 1查看 35关注 0票数 0

让我们定义一个名为Filter的类。我希望这个类被子类扩展,并且我希望所有这些子类都覆盖一个方法:job

更具体地说

代码语言:javascript
复制
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的概念。我的理解是,如果我是一只鸭子,我就试着跑。

代码语言:javascript
复制
f = SomeFilter()
f.job()

看看能不能用。这是我的问题--如果这会引发任何异常,那么在编写类SomeFilter时,我应该更加小心。

我很肯定我并不完全理解鸭子类型和EAFP的含义,但是如果这意味着我必须尽可能晚地推迟调试(也就是说,在调用的时候),那么我不同意这种想法。我不明白为什么这么多人似乎欣赏这种EAFP哲学,但我希望成为他们的一部分。

有人能转换我,并解释如何以安全预测的方式来实现这一点,即防止程序员在以的方式扩展Filter时犯错误。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-27 00:07:10

你可以使用raise NotImplementedError根据文件

代码语言:javascript
复制
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 NotImplementedError
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22675510

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档