понять:
class wrapper:
def __init__(self, object):
self.wrapped = object
def __getattr__(self, attrname):
print(‘Trace:’, attrname)
return getattr(self.wrapped, attrname)
x = wrapper([1, 2, 3])
x.append(4)
print(x.wrapped)
Почему на выходе получается?
Trace: append
[1, 2, 3, 4]
Почему сработал append, хотя объект списка указан, как атрибут? Насколько я понимаю, для этого необходимо было бы использовать такую инструкцию: x.wrapped.append(4)
Ну потому что у тебя там гетатр
Потому что append это тоже атрибут
Но это же атрибут обёрнутого объекта. Как получается, что append вызывается с аргументом?
когда ты делаешь x.append у тебя вызывается __getattr__ с attrname="append", после чего ты его принтишь, берёшь функцию append у твоего списка и возвращаешь её
Обсуждают сегодня