и посмотреть медиа
Código en una sirena - Codificación Python
и посмотреть медиа
Canal sobre programación en Python y otros idiomas. Explicaciones y códigos simples.
Canal sobre programación en Python y otros idiomas. Explicaciones y códigos simples.
bot de IA para clonar texto a voz y voz en Telegram. Cree audio utilizando la red neuronal de forma rápida y fácil.
Recurso para aquellos interesados en la programación. Enfóquese en Python, pero también cubre otros temas.
Знаете ли вы, что a + b и b + a в Python могут вернуть разное? Сложение выглядит симметрично, но под капотом Python сначала вызовет type(a).__add__(a, b). Левый и правый операнды идут через разные методы – __add__ и __radd__. Если у __add__ левого типа нет реализации для типа правого – он вернет NotImplemented, и Python вызовет __radd__ правого. class Money: def __init__(self, n): self.n = n def __radd__(self, other): return Money(self.n + other) result = 10 + Money(5) print(result.n) # 15 int.__add__(10, Money(5)) возвращает NotImplemented – тип int ничего не знает о Money. Тогда Python вызывает Money.__radd__(Money(5), 10) – и он-то знает что делать с int. Важно: NotImplemented это значение-синглтон, не исключение NotImplementedError. Возврат NotImplemented – сигнал для того чтобы попробовать другой метод, а не ошибка. Бывает исключение из обычного порядка: если правый операнд – подкласс левого и определяет свой __radd__, он вызывается первым, до __add__ левого: class A: def __add__(self, other): return "A.__add__" class B(A): def __radd__(self, other): return "B.__radd__" print(A() + B()) # B.__radd__ – а не A.__add__ Это сделано чтобы подкласс мог переопределить поведение базового класса. Если бы порядок был как обычно, то A.__add__ отработал бы первым и B никогда бы не получил шанс вмешаться, даже специально определив __radd__. Если оба метода возвращают NotImplemented (или их вообще нет) – случится TypeError: class X: pass class Y: pass try: X() + Y() except TypeError as e: print(e) # unsupported operand type(s) for +: 'X' and 'Y' Именно это сообщение Python выдает когда исчерпаны все варианты диспетчеризации. + может попробовать сделать сложение в два захода. Сначала через левый объект. И если через левый не получилось – то через правый. NotImplemented здесь – способ сказать "передай дальше", а не ошибка. Те же правила распространяются на __rsub__, __rmul__, __rtruediv__ и остальные reflected-методы. В следующий вторник – / vs // и отрицательное деление: почему -7 // 2 == -4, а не -3. Код на салфетке x Кусочки кода
Открыть канал и посмотреть медиаSolo los usuarios registrados pueden compartir su opinión.
¡Sé el primero en compartir tu experiencia con este recurso!