Можно ли переопределить или создать новый метод dunder для встроенных объектов, таких как int? [дубликат]Python

Программы на Python
Ответить
Anonymous
 Можно ли переопределить или создать новый метод dunder для встроенных объектов, таких как int? [дубликат]

Сообщение Anonymous »

Я пытаюсь определить новый тип деления, чтобы 1/0 не вызывало ошибку ZeroDivisionError, а вместо этого возвращало новый объект с именем infty(0), который определяется следующим образом:< /p>

Код: Выделить всё

class infty:

def __init__(self, sign:int):
if sign > 0:
self.sign = 1
elif sign < 0:
self.sign = -1
else:
self.sign = 0

def __repr__(self):
if self.sign > 0:
return '∞'
if self.sign < 0:
return '-∞'
return '?'
поэтому я создал новую функцию:

Код: Выделить всё

def safediv(a:int, b:int) -> float|infty:
if b == 0:
return infty(0)
return a/b
и попытался присвоить его truediv с помощью int.__truediv__ = Safediv
но это не удалось с сообщением об ошибке:

Код: Выделить всё

    int.__truediv__ = safediv
^^^^^^^^^^^^^^^
TypeError: cannot set '__truediv__' attribute of immutable type 'int'
Есть ли способ добиться эффекта, при котором 1/0 возвращает infty(0)?

Подробнее здесь: https://stackoverflow.com/questions/792 ... bjects-lik
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»