我有一个类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,请投票!