Python Glossary English

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Сообщить о неточности