我有一个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',而是'Optional [Type [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,请投票!