Обзор:
class Inner(object):
def __init__(self, x):
self.x = x
class Outer(object):
def __init__(self, z):
self.inner = Inner(z)
o = Outer(10)
Теперь я хочу Внешний объект должен вести себя прозрачно - любые атрибуты, установленные на o
, должны быть установлены на o.inner
, то же самое для чтения: o.something
фактически должно возвращать , значение o.inner.sommething
. Вроде как прокси или реле.
__ getattr __
для Внешний
кажется простым и работает:
def __getattr__(self, item):
return getattr(self, item)
Как бы я справился с __ setattr __
? Я не мог придумать ничего, что не вызвало бы ошибку рекурсии и не заставило бы меня ненавидеть себя.
Или сама концепция ошибочна?
(Другой подход, который я пробовал, заключался в том, чтобы сделать Outer
подклассом Inner
- эстетически это не играло эстетической роли @classmethods
, не говоря уже о IDE будет потеряна внутри них - не сможет определить некоторые атрибуты. Оставим это пока, может быть?)