当使用self .__ class __()返回Foo类的实例时,为什么PyCharm认为类型应该是Optional [Type [Foo]]?

问题描述 投票:0回答:1

我有一个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
1个回答
1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.