Почему Python не вызывает дескриптор функции внутри другого дескриптора?Python

Программы на Python
Anonymous
Почему Python не вызывает дескриптор функции внутри другого дескриптора?

Сообщение Anonymous »

У меня есть следующий код:

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

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, хранящейся в self.value, и возвращать метод, связанный с объектом Identity, поэтому return self.value должен запускаться (приблизительно) return getattr_static(self, "value").__get__(self, type(self)).
Сначала я думал, что, возможно, объект функции проверяет, привязан ли он к классу, который изначально его определил, но это не так:

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

>>> import inspect
>>> example.non_method.__get__(inspect.getattr_static(example, "non_method"), Identity)

(Обратите внимание, что из-за поведения я нахожу это загадочным, example.non_method, здесь несвязанная функция non_method)
Что здесь происходит? Почему дескриптор функции не срабатывает?

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