Я пытаюсь реализовать подсказку типа для ситуаций, когда у нас есть класс Base
, который реализует метод __init__
и ожидает некоторый obj
типа Base.obj_type
, а в подклассах ожидает тип SubClass.obj_type
Примерно так:
class Base:
obj_type = int
def __init__(self, obj: 'obj_type'):
self.obj = obj
class A(Base):
object_type = str
A(1). # I want to get type check error here, because A expect str type for obj
Я могу добиться этого, переопределив __init__
в подклассе, но есть другой способ получить это? Спасибо за вашу помощь!
UPD. Одно из возможных решений, которое я нашел на основе typing.Generic
. Но, к сожалению, это не принудительная проверка типов в PyCharm, только mypy
правильно ее понимают.
import typing as t
T = t.TypeVar("T")
class Base(t.Generic[T]):
def __init__(self, obj: T):
self.obj = obj
class A(Base[str]):
pass
a = A(1)
ошибка mypy: error: Argument 1 to "A" has incompatible type "int"; expected "str"