Пользовательский тип, явно объявляющий вложенный тип
Я считаю действительно полезным иметь такие типы Python, как Dict[str, int]
, которые объявляют типы, которые они содержат, и позволяют им также проверяться на тип. Однако я не могу найти, как я могу создать такой тип. Если, например, я напишу
class Classy:
def __init__(self, x: Any) -> None:
self.value = x
как я могу выразить это как Classy[int]
, Classy[str]
, Classy[List[int]]
, так далее?
1 ответ
Решение
Использование TypeVar()
объявить переменную типа и использовать Generic
как базовый класс.
from typing import TypeVar, Generic
T = TypeVar('T')
class Classy(Generic[T]):
def __init__(self, x: T) -> None:
self.value = x
def get_value(self) -> T:
return self.value
Ты можешь попробовать:
class1 = Classy[int](100)
class2 = Classy[str]('abc')
print(class1.get_value())
print(class2.get_value())
Тогда вы увидите:
100
abc