Исключение, брошенное в методе Python Magic, теряется на путиPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Исключение, брошенное в методе Python Magic, теряется на пути

Сообщение Anonymous »

Для проекта я хочу предотвратить использование определенных методов в переоценке класса. Поиск атрибутов, но не имеет особого отношения, кроме этого.
Этот подход также используется для магических методов, которые переопределяют операторы (например, == оператор).
При вызове магического метода __eq __

Почему это так? Кажется, что где-то есть где-то на этом пути (я проверил разные типы исключений), но я не понимаю, почему это полезно для языкового поведения. Есть ли причина? < /Li>
Есть ли способ изменить мой подход, так что оба используют исключение?from typing import override

class ErrorDescriptor:
def __get__(self, obj: object, objtype: object = None):
print("Exception incoming")
raise RuntimeError()

def __set__(self, obj: object, objtype: object = None): ...

class Meta(type):
def __new__(cls, name: str, bases: tuple[type, ...], cls_dict: dict[str, object]):
cls_dict["__eq__"] = ErrorDescriptor()
return super().__new__(cls, name, bases, cls_dict)

class Foo:
@override
def __eq__(self, other: object):
return True

class Bar(Foo, metaclass=Meta):
pass

print(Foo() == 0) # True
print(Bar() == 0) # Exception incoming\n False
# ^^^^^ ?!
print(Bar().__eq__(0)) # Exception incoming\n raises RuntimeError


Подробнее здесь: https://stackoverflow.com/questions/796 ... on-the-way
Реклама
Ответить Пред. темаСлед. тема

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

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

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

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

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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