Для проекта я хочу предотвратить использование определенных методов в переоценке класса. Поиск атрибутов, но не имеет особого отношения, кроме этого.
Этот подход также используется для магических методов, которые переопределяют операторы (например, == оператор).
При вызове магического метода __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
Исключение, брошенное в методе Python Magic, теряется на пути ⇐ Python
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Плохое файл конфигурации службы или исключение, брошенное при построении объекта процессора
Anonymous » » в форуме JAVA - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-