Код: Выделить всё
class Identity:
def __init__(self, value):
self.value = value
def __get__(self, obj, objtype=None):
return self.value
def __set__(self, obj, value):
self.value = value
class Example:
@Identity
def non_method():
pass
Код: Выделить всё
>>> example = Example()
>>> example.non_method
Мне кажется, что return self.value в Identity.__get__ должен инициировать поведение дескриптора non_method и возвращать метод, привязанный к объекту Identity.
Сначала я думал, что, возможно, объект функции проверяет, привязан ли он к классу, который первоначально его определил, но это не так случай:
Код: Выделить всё
>>> import inspect
>>> example.non_method.__get__(inspect.getattr_static(example, "non_method"), Identity)