Вложенные объекты и setattr & getattr (да, именно тогда)

Обзор:

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 будет потеряна внутри них - не сможет определить некоторые атрибуты. Оставим это пока, может быть?)

6
задан ntl0ve 7 February 2012 в 17:20
поделиться