Погружение в CPython и архитектуру. Разбираем неочевидное поведение (GIL, Memory), Best Practices (SOLID, DDD) и тонкости Django/FastAPI. Решаем задачи с подвохом и оптимизируем алгоритмы. 🐍
По всем вопросам @evgenycarter
РКН clck.ru/3Ko7Hq
Post #3773
2.53K
Есть шесть магических методов Python, которые определяют правила сравнения объектов:
‣
‣
‣
‣
‣
‣
Если некоторые из этих методов не определены или возвращают
‣
‣
‣
Однако, из
Декоратор
👉@BookPython
‣
__lt__ для <‣
__gt__ для >‣
__le__ для <=‣
__ge__ для >=‣
__eq__ для ==‣
__ne__ для !=Если некоторые из этих методов не определены или возвращают
NotImplemented, применяются следующие правила:‣
a.__lt__(b) эквивалентно b.__gt__(a)‣
a.__le__(b) эквивалентно b.__ge__(a)‣
a.__eq__(b) эквивалентно not a.__ne__(b) (обратите внимание, что в этом случае a и b не меняются местами)Однако, из
a >= b и a != b не следует автоматически, что a > b.Декоратор
functools.total_ordering создает все шесть методов на основе __eq__ и одного из следующих: __lt__, __gt__, __le__ или __ge__.
from functools import total_ordering
@total_ordering
class User:
def __init__(self, pk, name):
self.pk = pk
self.name = name
def __le__(self, other):
return self.pk <= other.pk
def __eq__(self, other):
return self.pk == other.pk
assert User(2, 'Vadim') < User(13, 'Catherine')
👉@BookPython
- 👍 4