我有一个与PyCharm密切相关的特定问题(社区3.1.1)。以下简单示例说明了这一点。我将使用PyCharm的屏幕截图而不是输入代码,原因很快就会明白。
正如您所看到的,PyCharm以黄色突出显示对self.say_hello()
的调用,可能这是因为say_hello()
类中未实现Base
。 say_hello()
未在基类中实现的事实本身就是故意的,因为我想要一种“抽象”效果,因此Base
的实例无法调用say_hello()
(因此不应调用hello()
),但Child
的实例可以调用hello()
(在Base
类中实现)。如果没有PyCharm抱怨,我如何获得这种“抽象”效果?
我从here了解到,我可以使用abc
模块。但是,对我来说,这将是相当繁琐的,而不是pythonic。你有什么建议?
答案 0 :(得分:9)
我会将say_hello()
实现为存根:
class Base(object):
# ...as above...
def say_hello(self):
raise NotImplementedError
或者,只传入say_hello()
的主体。
这也会向用户发出Base
类的信号,在调用say_hello()
时遇到AttributeError之前应该obj.hello()
。
是否提出异常或pass
取决于无所作为是否是合理的默认行为。如果您要求用户提供自己的方法,请引发异常。