его как порождающий объект?
аля
In [13]: T = t.TypeVar('T')
In [14]: class Some(t.Generic[T]):
...: def foo(self, bar) -> T:
...: return T(bar)
...:
In [15]: Some[int]().foo('bar') -> int
In [14]: class Some(t.Generic[T]): ...: type_: T ...: def foo(self, bar) -> T: ...: return self.type_(bar) ...: Some(int).foo('bar') -> int А так? __init__ ещё
оно так полетит? ща попробую
Полетит, если __init__ затайпишь правильно
Type erasure приводит к тому что ты не знаешь параметры дженерика на экземпляре. А вот имея сам дженерик ты конечно модель что-то делать. Но скорее всего тут проще вывернуть наизнанку и вместо Some[int]() Написать Some(int) За счёт автовывода типов будет эквивалентно, но у тебя в ините будет явно ссылка на тип
если так сделать, выйдет абсолютно неиспользуемая хуйня, потому что я делаю доменные примитивы вида AccountID(“111-11-11”) и конвертеры для них. объяснить другим разработчикам как пользоваться штукой типа SomeID(“11111”, AccountID).to_domain() не представляется возможным
class SomeShittyID(Generic[T]): def __init__(self, id_: str) -> None: self._id = id_ @property def uuid(self) -> T: return encode(self._id) @classmethod def from_domain(cls, value: T) -> typing.Self: return cls(decode(value)) SomeShittyID.from_domain(DomainID('111-111-111')).uuid -> DomainID # but UUID SomeShittyID.from_domain(AnotherDomainID('222-222-222')).uuid -> AnotherDomainID # but still UUID понимаешь о чём я?
Нет. Не вижу использования T
потому что это бессмысленно, пока я явно не передам нужный класс или прибинженные энкодеры-декодеры
Обсуждают сегодня