Что означают принципы PECS
Python
Senior
Без компании
Что означают принципы PECS
Ответы
PECS (Producer Extends, Consumer Super) — это мнемоническое правило в Java для работы с дженериками и вайлдкардами (`? extends T` и `? super T`). В Python аналогов нет, но принцип можно объяснить на примере типизации:
- **Producer Extends** (поставщик расширяет) — если структура данных только "производит" элементы (например, итерируется), используйте `Iterable[+T]` (ковариантность). Пример:
```
from typing import Iterable
def process_numbers(nums: Iterable[float]) -> float:
return sum(nums) # только читаем, ковариантно
```
- **Consumer Super** (потребитель принимает) — если структура только "потребляет" (например, добавляет элементы), используйте `List[-T]` (контравариантность). Пример:
```
from typing import List
def fill_with_defaults(lst: List[object]) -> None:
lst.append(42) # только записываем, контравариантно
```
В Python это менее явно из-за duck typing, но актуально при строгой типизации (mypy, pyright).