当使用 self.__class__() 返回类 Foo 的实例时,为什么 PyCharm 认为该类型应该是 Optio



我有一个类Foo,它有一个返回另一个Foo实例的方法。

from __future__ import annotations
class Foo:
def get_other_foo(self) -> Foo:
return self.__class__()

(__future__导入是使该方法的Foo注释在 Python 3.7 中工作。

这有效,MyPy 不会标记文件中的任何错误。但是,PyCharm 以黄色突出显示返回值,当我将鼠标悬停在它上面时,我收到警告"预期类型'Foo',而是获得'可选[类型[Foo]]'"。

我考虑在方法中硬编码Foo,如下所示:

from __future__ import annotations
class Foo:
def get_other_foo(self) -> Foo:
return Foo()

这也可以工作,并使 PyCharm 警告静音。但是,在子类中,这将返回Foo的实例而不是子类的实例,所以我不愿意这样做。

为什么 PyCharm 认为在我的第一个示例中应该Optional[Type[Foo]]返回类型?有没有办法修复 PyCharm 警告,同时保持get_other_foo()在从子类调用时返回子类实例的能力?

这是一个已知问题 https://youtrack.jetbrains.com/issue/PY-37935,请投票!

相关内容

  • 没有找到相关文章

最新更新