@albertalexandrov

Отобразить тип возвращаемого значения из дочернего класса?

Всем привет!)

Скажите, пожалуйста, можно ли сделать так, чтобы для метода базового класса тип возвращаемого значения был взят из дочернего?

Например:

5e0702fe73e3b354107442.jpeg

class Base:

    def method(self) -> 'type_':
        return


class A1(Base):
    type_ = int


class A2(Base):
    type_ = str


Переопределение не предлагать) Я сейчас так делаю, но таких подклассов у меня много.
  • Вопрос задан
  • 63 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Andy_U
Вы чего-то странного желаете. По крайней мере в вашем упрощенном примере наследование вообще не нужно. Ну, будет вместо одной строки, где вы определяете type_, две - на определение метода method? В конце концов, можно декоратор определить для класса. Ну и возврат типа - похоже на какое-то извращение.

P.S. Почитайте про паттерны проектирования. Где-то на гитхабе я даже для питона видел проект с примерами реализации.

P.P.S. Если уж очень надо, то так (Python 3.7 или 3.8):

from __future__ import annotations
from typing import TypeVar


_TA = TypeVar('_TA', bound='A')


class A:
    type_ = None

    def method(self: _TA) -> _TA.type_:
        return self.type_


class B(A):
    type_ = int


class C(A):
    type_ = str


if __name__ == '__main__':
    print(B().method())
    print(C().method())


И я бы еще базовый класс сделал абстрактным, но это уж сами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы