rendered paste bodyclass Descr(object): def __get__(self, obj, objtype): if obj is None: value = objtype.__dict__['_foo'] print "__get__ (on class): ", value else: value = obj.__dict__['_foo'] print "__get__: ", value return value def __set__(self, obj, value, objtype=None): if obj is None: print "__set__ (on class): ", value objtype.__dict__['_foo'] = value else: print "__set__: ", value obj.__dict__['_foo'] = valueclass CoolerSetAttr(type): def __setattr__(cls, name, value): if name in cls.__dict__ and hasattr(cls.__dict__[name], '__set__'): cls.__dict__[name].__set__(None, value, cls) else: type.__setattr__(name, value)class Foo(object): __metaclass__ = CoolerSetAttr _foo = 90 foo = Descr() def __init__(self): self._foo = 123f = Foo()print f.foof.foo = 456print f.fooprint "========================"print Foo.fooFoo.foo = 456print Foo.foo