Python 3.5+Аннотации и typingпонятие
Generic[T]
generics
Базовый класс для создания обобщённых пользовательских классов. Параметры типа задаются через TypeVar.
Синтаксис
from typing import Generic, TypeVar
T = TypeVar('T')
class MyClass(Generic[T]): ...
С Python 3.12 наследовать Generic и заводить TypeVar вручную больше не нужно — параметры типа объявляются прямо в заголовке класса, в квадратных скобках после имени. Параметры существуют только для проверяющего: во время выполнения они стираются, поэтому isinstance с параметризованным типом бросит TypeError. Если параметров несколько, их порядок в Generic задаёт порядок при подстановке типов на месте использования.
Примеры
from typing import Generic, TypeVar
T = TypeVar('T')
class Stack(Generic[T]):
def __init__(self): self._items: list[T] = []
def push(self, item: T) -> None: self._items.append(item)
def pop(self) -> T: return self._items.pop()
s: Stack[int] = Stack()
s.push(1)
s.push(2)
print(s.pop()) # → 2
print(len(s._items)) # → 1
s.push(10)
print(s.pop()) # → 10
print(len(s._items)) # → 1
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности