Я пытаюсь понять, как методы работают как дескрипторы.
Там написано что-то вроде: this :
Для поддержки вызовов методов, функции включают в себя метод __get__()
для методов привязки во время доступа к атрибутам. Это означает, что все функции не являются дескрипторами данных, которые возвращают связанные методы, когда они вызываются из объекта.
Основываясь на этом описании и том факте, что "Dotted access from a class calls __get__()"
я предполагал, что можно декорировать __get__
метода класса.
Я пытаюсь обернуть someFunction.__get__
:
def wrap(func):
def wrapped(*args, **kwargs):
print("Wrapping...")
return func(*args, **kwargs)
return wrapped
class SomeClass():
def someFunction(self):
print("someFunction called")
someFunction.__get__ = wrap(someFunction.__get__)
obj = SomeClass()
obj.someFunction()
Вывод просто "someFunction called"
, как будто ничего не изменилось.
Итак, мой вопрос: почему Wrapping...
журнал не печатается? Имеет ли присвоение:
someFunction.__get__ = wrap(someFunction.__get__)
что-нибудь?