当使用 self.__class__() 返回 class Foo 的实例时,为什么 PyCharm 认为类型应该是 Optional[Type[Foo]]?
When returning an instance of class Foo using self.__class__(), why does PyCharm think the type should be Optional[Type[Foo]]?
我有一个 class Foo,它有一个 return 另一个 Foo 实例的方法。
from __future__ import annotations
class Foo:
def get_other_foo(self) -> Foo:
return self.__class__()
(__future__
导入是为了使方法上的 Foo
注释在 Python 3.7 中工作。)
这有效,MyPy 不会在文件中标记任何错误。但是,PyCharm 以黄色突出显示 return 值,当我将鼠标悬停在它上面时,我收到警告 "Expected type 'Foo', got 'Optional[Type[Foo]]' instead".
我考虑过在方法中对 Foo 进行硬编码,如下所示:
from __future__ import annotations
class Foo:
def get_other_foo(self) -> Foo:
return Foo()
这也有效,并使 PyCharm 警告静音。但是,在 subclass 中,这将 return Foo 的实例而不是 subclass 的实例,所以我不愿意这样做。
为什么 PyCharm 认为 return 类型在我的第一个例子中应该是 Optional[Type[Foo]]
?当从 subclass 调用时,有没有办法修复 PyCharm 警告,同时保持 get_other_foo()
到 return subclass 实例的能力?
这是一个已知问题https://youtrack.jetbrains.com/issue/PY-37935,请投票!
我有一个 class Foo,它有一个 return 另一个 Foo 实例的方法。
from __future__ import annotations
class Foo:
def get_other_foo(self) -> Foo:
return self.__class__()
(__future__
导入是为了使方法上的 Foo
注释在 Python 3.7 中工作。)
这有效,MyPy 不会在文件中标记任何错误。但是,PyCharm 以黄色突出显示 return 值,当我将鼠标悬停在它上面时,我收到警告 "Expected type 'Foo', got 'Optional[Type[Foo]]' instead".
我考虑过在方法中对 Foo 进行硬编码,如下所示:
from __future__ import annotations
class Foo:
def get_other_foo(self) -> Foo:
return Foo()
这也有效,并使 PyCharm 警告静音。但是,在 subclass 中,这将 return Foo 的实例而不是 subclass 的实例,所以我不愿意这样做。
为什么 PyCharm 认为 return 类型在我的第一个例子中应该是 Optional[Type[Foo]]
?当从 subclass 调用时,有没有办法修复 PyCharm 警告,同时保持 get_other_foo()
到 return subclass 实例的能力?
这是一个已知问题https://youtrack.jetbrains.com/issue/PY-37935,请投票!