tg-me.com/BookPython/3444
Last Update:
Если вы пишете много Python-кода, наверняка сталкивались с типичной задачей: определение класса с простым конструктором и базовыми методами вроде __repr__
. Например:
class Server:
def __init__(self, ip, version=4):
self.ip = ip
self._version = version
def __repr__(self):
return '{klass}("{ip}", {version})'.format(
klass=type(self).__name__,
ip=self.ip,
version=self._version,
)
Это выглядит однообразно, но легко автоматизируется. Популярный пакет attrs позволяет избавиться от такого шаблонного кода:
from attrs import define, field
@define
class Server:
ip = field()
_version = field(default=4)
server = Server(ip='192.168.0.0.1', version=4)
Пакет attrs генерирует конструктор, метод
__repr__
, а также методы сравнения (__eq__
, __lt__
, и т.д.) — всё это минимальными усилиями.Однако с появлением Python 3.7 разработчики получили встроенное решение для этой задачи — data classes. Это стандартный инструмент, который использует аннотации типов для автоматического создания тех же самых методов:
from dataclasses import dataclass
@dataclass
class InventoryItem:
name: str
unit_price: float
quantity_on_hand: int = 0
def total_cost(self) -> float:
return self.unit_price * self.quantity_on_hand
Почему стоит обратить внимание на data classes:
1. Чистый код: Конструкция читается просто и выглядит лаконично.
2. Поддержка стандартной библиотеки: Не нужно добавлять зависимости.
3. Типы и валидация: С аннотациями типов ваш код становится более понятным и безопасным.
attrs остаётся полезным инструментом, особенно если вам нужны более продвинутые возможности (например, валидация значений полей), но для большинства задач data classes — отличное решение прямо "из коробки".
👉@BookPython
BY Библиотека Python разработчика | Книги по питону
Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283
Share with your friend now:
tg-me.com/BookPython/3444