При возврате экземпляра класса Foo с использованием self .__ class __ (), почему PyCharm считает тип необязательным [Type [Foo]]? - PullRequest
0 голосов
/ 19 сентября 2019

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

...