Education 1.1 Help

Глава 1. Модель данных в языке Python

import collections Card = collections.namedtuple('Card', ['rank', 'suit'])

Автор использует collections.namedtuple для конструирования простого класса, представляющего одну карту. Он содержит только атрибуты и никаких методов, как, например, запись базы данных.

beer_card = Card('7', 'diamonds') print(beer_card)
Card(rank='7', suit='diamonds')

===

Программисты, имеющие опыт работы с языками, где имеется метод toString, по привычке реализуют метод __str__, а не __repr__. Если вы реализуете только один из этих двух методов, то пусть это будет __repr__.

===

В табл. 1.1 показаны имена специальных методов, за исключением тех, что используются для реализации инфиксных операторов и базовых математических функций, например abs.

Таблица 1.1. Имена специальных методов (операторы не включены)

Категория

Имена методов

Представление в виде строк и байтов

__repr__, __str__, __format__, __bytes__, __fspath__

Преобразование в число

__bool__, __complex__, __int__, __float__, __hash__, __index__

Эмуляция коллекций

__len__, __getitem__, __setitem__, __delitem__, __contains__

Итерирование

__iter__, __aiter__, __next__, __anext__, __reversed__

Выполнение объектов, допускающих вызов, или сопрограмм

__call__, __await__

Управление контекстом

__new__, __init__, __del__

Управление атрибутами

__getattr__, __getattribute__, __setattr__, __delattr__, __dir__

Дескрипторы атрибутов

__get__, __set__, __delete__, __set_name__

Абстрактные базовые классы

__instancecheck__, __subclasscheck__

Метапрограммирование классов

__prepare__, __init_subclass__, __class_getitem__, __mro_entries__

Инфиксные и числовые операторы поддерживаются специальными методами, перечисленными в табл. 1.2

Таблица 1.2. Имена специальных методов для операторов

Категория операторов

Символы

Имена методов

Унарные числовые операторы

- + abs()

__neg__ __pos__ __abs__

Операторы сравнения

< <= == !- > >=

__lt__ __le__ __eq__ __ne__ __gt__ __ge__

Арифметические операторы

+ - * / // % @ divmod() round() ** pow()

__radd__ __rsub__ __rmul__ __rtruediv__ __rfloordiv__ __rmod__ __rmatmul__ __rdivmod__ __rpow__

Инверсные арифметические операторы

(арифметические операторы с переставленными операндами)

__add__ __sub__ __mul__ __truediv__ __floordiv__ __mod__ __matmul__ __ divmod__ __round__ __pow__

Арифметические операторы составного присваивания

+= -= *= /= //= %= @= **=

__iadd__ __isub__ __imul__ __itruediv__ __ifloordiv__ __imod__ __imatmul__ __ipow__

Поразрядные операторы

& \| ^ << >> ~

__and__ __or__ __xor__ __lshift__ __rshift__ __invert__

Инверсные поразрядные операторы

(поразрядные операторы с переставленными операндами)

__rand__ __ror__ __rxor__ __rlshift__ __rrshift__

Поразрядные операторы составного присваивания

&= \| = ^= <<= >>=

__iand__ __ior__ __ixor__ __ilshift__ __irshift__

===

Вот еще цитата из «Дзен Python»: « особые случаи не настолько особые, чтобы из-за них нарушать правила».

Last modified: 05 November 2024