Пользовательский тип, явно объявляющий вложенный тип

Я считаю действительно полезным иметь такие типы 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
Другие вопросы по тегам