【发布时间】:2019-09-19 03:11:07
【问题描述】:
我有一个类 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() 在从子类调用时返回子类实例的能力?
【问题讨论】:
标签: python-3.x pycharm python-typing