gpt4 book ai didi

Python 未实现的方法与抽象方法,哪个更 Pythonic? PyCharm 不喜欢未在基类中实现的方法

转载 作者:行者123 更新时间:2023-12-04 22:46:36 25 4
gpt4 key购买 nike

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



如您所见,对 self.say_hello() 的调用PyCharm 以黄色突出显示,这可能是因为 say_hello()未在 Base 中实现类(class)。 say_hello() 的事实未在基类中实现是我故意的,因为我想要一种“抽象”效果,所以 Base 的实例无法调用say_hello() (因此不应该调用 hello() ),但是 Child 的一个实例可以调用hello() (在 Base 类中实现)。如何在没有 PyCharm 提示的情况下获得这种“抽象”效果?

正如我从 here 那里了解到的那样,我可以使用 abc模块。但是,对我来说,这会相当麻烦,而且有点不像 pythonic。你有什么建议?

最佳答案

我会实现 say_hello()作为 stub :

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

def say_hello(self):
raise NotImplementedError

或者,只将 pass 放在 say_hello() 的正文中.

这也会向您的 Base 的用户发出信号。类 say_hello()应该在她调用 obj.hello() 时得到 AttributeError 之前实现.
是否引发异常或 pass取决于什么都不做是明智的默认行为。如果您要求用户提供她自己的方法,请引发异常。

关于Python 未实现的方法与抽象方法,哪个更 Pythonic? PyCharm 不喜欢未在基类中实现的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22766798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com