Ответы пользователя по тегу PyCharm
  • Как указать тайпхинт для возврата наследников?

    petushok55
    @petushok55
    Обучаюсь на практике.
    1) Чтобы исправить проблему с автодополнением, можно указать тип переменной `cls` как `Type[AbstractCls]`, чтобы IDE знала, что она является экземпляром класса `AbstractCls`. Это можно сделать следующим образом:

    cls: Type[AbstractCls] = AbstractCls.get_cls()

    Теперь IDE будет корректно подсказывать методы и атрибуты класса `AbstractCls`.

    2) К сожалению, автоматические подсказки для методов класса `A` не будут появляться без переопределения `get_cls()` в самом классе `A`. Это связано с тем, что статические методы и методы класса не наследуются от родительского класса, и IDE не сможет автоматически определить, какие методы доступны для экземпляров класса `A`. Поэтому, чтобы иметь автодополнение для методов класса `A`, необходимо переопределить `get_cls()` в классе `A`, как вы уже указали в комментарии в коде.

    @classmethod
    def get_cls(cls) -> Type['A']:
        return super().get_cls()


    Теперь IDE будет предоставлять автодополнение для методов класса `A` при использовании переменной `o`.
    Ответ написан
    Комментировать