【问题标题】:When returning an instance of class Foo using self.__class__(), why does PyCharm think the type should be Optional[Type[Foo]]?当使用 self.__class__() 返回类 Foo 的实例时,为什么 PyCharm 认为类型应该是 Optional[Type[Foo]]?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-03
      相关资源
      最近更新 更多