view Descriptors @ 244:eee52d5a4af8 default tip

created
author 127.0.0.1
date Sun, 30 Jun 2013 11:08:33 +0200
parents b75a4f07efa8
children
line wrap: on
line source

{{{#!python
def __getattribute__(self, name):
    if name in self.__dict__:
        return self.__dict__[name]
    for cls in self.__class__.mro():
        if name in cls.__dict__:
            attr = cls.__dict__[name]
            if hasattr(attr.__class__, '__get__'):
                return attr.__get__(self, cls)
            return attr
    return self.__getattr__(name)

def set_attr(thing, name, value):
    if hasattr(thing.__class__, '__setattr__'):
        thing.__setattr__(name, value)
        return
    for cls in self.__class__.mro():
        if (name in cls.__dict__ and
            hasattr(cls.__dict__[name].__class__, '__set__')):
            cls.__dict__[name].__set__(self, name, value)
            return
    self.__dict__[name] = value

def del_attr(thing, name):
    if hasattr(thing.__class__, '__delattr__'):
        thing.__delattr__(name)
        return
    for cls in self.__class__.mro():
        if (name in cls.__dict__ and
            hasattr(cls.__dict__[name].__class__, '__delete__')):
            cls.__dict__[name].__delete__(self, name)
            return
    del self.__dict__[name]
}}}