Вот как я это понимаю:
x = Wrapper([1, 2, 3])
Итак, x.wrapped
- это list
, то есть [1, 2, 3]
.
Теперь, когда вы делаете x.append
Вы звоните __getattr__
из Wrapper
с аргументом append
.Поэтому, когда python разрешает:
getattr(self.wrapped, attrname)
, он получает метод append
вашего внутреннего списка, который затем возвращается.Итак, вы можете себе представить, что ваш код интерпретируется как:
# just got it outside for later explanation
l = [1, 2, 3]
x = Wrapper(l)
f = x.__getattr__('append')
# here `f` is the `append` method of `l`
f(4) # which is equivalent to `l.append(4)`
# finally
print(x.wrapped)
# which is equivalent to `print(l)`, hence the output
# [1, 2, 3, 4]
Надеюсь, это поможет.