class Foo(object): def __init__(self): print self.__dict__ super(Foo, self).__setattr__("data", {"bing": 2}) def __getattr__(self, name): return self.data.get(name) def __setattr__(self, name, value): self.data[name] = value @property def bar(self): return 3 @property def bing(self): raise AttributeError("blarg") f = Foo() f.foo = 2 print f.foo print f.bar print f.bing