При вызове метода __getattr__, вызывается функция внутри нее
Почему при вызове метода getattr, вызывается функция внутри нее
class Interception:
def __getattr__(self, attrname):
print("Trace: " + attrname)
return lambda x: x
<input> obj = Interception()
<input> obj.start
<output> Trace: start
<lambda function>
<input> obj.start(5)
<output> Trace: start
5
Если просто вызвать метод, он отлавливает не существующий аргумент, но при вызове его как функции он передает аргументы
Ответы (1 шт):
Автор решения: ganz
→ Ссылка
Изменим ваш код без анонимной функции для удобства:
class Interception:
def __getattr__(self, attrname):
print("Trace: " + attrname)
def subfunc(c):
print('called subfunc:',c)
return 'from subfunc'
return subfunc
a=Interception()
print(a.y)
print(a.z(999999999))
Который вернёт
Trace: y
<function Interception.__getattr__.<locals>.subfunc at 0x0000000001D06160>
Trace: z
called subfunc: 999999999
from subfunc
Как видно ваши ожидания с Z не совпали с действительностью. Тоесть gettatr так же возвращает функцию, и незамедлительно происходит её вызов.
print(a.тут_мы_получили_функцию('а здесь незамедлительно её вызываем'))