нужно передать в качестве аргумента класс.
Есть у меня некая абстракция
class Abs:
...
И создаю я от нее класс
class Implement(Abs):
...
Теперь для снижения связности кода, я передаю этот класс как аргумент в конструктор другого класса. Что-то типа такого
class Execute:
def __init__(self, implement_class: Abs):
self.implemet_class = implement_class
def run(self, data: dict) -> Abs:
return self.implement_class(**data)
И вот здесь статические анализаторы сходят с ума, так как isinstance(Implement, Abs) == False. И mypy и Pylance накидали ошибок, что мол мисттайп у тебя в сигнатуре конструктора. А как тогда обозначить тайпхинт абстракции, чтоб все его дочерние классы проходили проверку? Если передавать объекты класса Implemet, то проблем не будет
>>> i = Implemet()
>>> isinstance(i, Abs)
True
>>> isinstance(Implement, Abs)
False
PS: Я прекрасно понимаю, что Implement не является инстансом Abs а его дочерним классом, но как тогда правильно в этом случае тайпхинт указывать?
typing.type[Abs] попробуй
def __init__(self, implement_class: Abs) в этом моменте
type нельзя параметоизовывать
Обсуждают сегодня