У меня есть класс 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()
возвращать экземпляр подкласса при вызове из подкласса?