Python未实现的方法与抽象方法相比,更加pythonic? PyCharm不喜欢基类中没有实现的方法

时间:2014-03-31 16:17:28

标签: python abstract pycharm

我有一个与PyCharm密切相关的特定问题(社区3.1.1)。以下简单示例说明了这一点。我将使用PyCharm的屏幕截图而不是输入代码,原因很快就会明白。

正如您所看到的,PyCharm以黄色突出显示对self.say_hello()的调用,可能这是因为say_hello()类中未实现Basesay_hello()未在基类中实现的事实本身就是故意的,因为我想要一种“抽象”效果,因此Base的实例无法调用say_hello()(因此不应调用hello()),但Child的实例可以调用hello()(在Base类中实现)。如果没有PyCharm抱怨,我如何获得这种“抽象”效果?

我从here了解到,我可以使用abc模块。但是,对我来说,这将是相当繁琐的,而不是pythonic。你有什么建议?

1 个答案:

答案 0 :(得分:9)

我会将say_hello()实现为存根:

class Base(object):
    # ...as above...

    def say_hello(self):
        raise NotImplementedError

或者,只传入say_hello()的主体。

这也会向用户发出Base类的信号,在调用say_hello()时遇到AttributeError之前应该obj.hello()。 是否提出异常或pass取决于无所作为是否是合理的默认行为。如果您要求用户提供自己的方法,请引发异常。