Назад к вопросам
X5 tech
Middle+
2
Работал с Protocol в Python? Что такое дженерики (Generics)?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
Да, в Python есть Protocol из модуля typing, который позволяет описывать структурные типы — то есть типы, определяемые по наличию определённых методов и атрибутов, а не по наследованию. Это основа для duck typing с поддержкой статической типизации.
Пример использования Protocol:
from typing import Protocol
class SupportsClose(Protocol):
def close(self) -> None:
...
class Resource:
def close(self) -> None:
print("Closed")
def cleanup(resource: SupportsClose) -> None:
resource.close()
r = Resource()
cleanup(r) # Работает, потому что Resource реализует метод close
Дженерики (Generics) — это параметризация типов, позволяющая создавать обобщённые функции и классы, которые работают с разными типами данных, сохраняя при этом информацию о типе.
Пример дженерика с использованием TypeVar:
from typing import TypeVar, Generic, List
T = TypeVar('T')
class Stack(Generic[T]):
def __init__(self) -> None:
self.items: List[T] = []
def push(self, item: T) -> None:
self.items.append(item)
def pop(self) -> T:
return self.items.pop()
stack_int = Stack[int]()
stack_int.push(1)
value = stack_int.pop() # value имеет тип int
Таким образом, Protocol помогает описывать интерфейсы по структуре, а дженерики — создавать универсальные компоненты с сохранением типовой безопасности.