Sobes.tech
Back to questions
Middle+
1

Работал с Protocol в Python? Что такое дженерики (Generics)?

Companies where asked
X5 techX5 tech

Answer from AI

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 помогает описывать интерфейсы по структуре, а дженерики — создавать универсальные компоненты с сохранением типовой безопасности.