|
52
|
1 {{{#!python
|
|
|
2 def __getattribute__(self, name):
|
|
114
|
3 if name in self.__dict__:
|
|
52
|
4 return self.__dict__[name]
|
|
171
|
5 for cls in self.__class__.mro():
|
|
114
|
6 if name in cls.__dict__:
|
|
126
|
7 attr = cls.__dict__[name]
|
|
230
|
8 if hasattr(attr.__class__, '__get__'):
|
|
126
|
9 return attr.__get__(self, cls)
|
|
|
10 return attr
|
|
114
|
11 return self.__getattr__(name)
|
|
124
|
12
|
|
|
13 def set_attr(thing, name, value):
|
|
230
|
14 if hasattr(thing.__class__, '__setattr__'):
|
|
126
|
15 thing.__setattr__(name, value)
|
|
127
|
16 return
|
|
171
|
17 for cls in self.__class__.mro():
|
|
231
|
18 if (name in cls.__dict__ and
|
|
|
19 hasattr(cls.__dict__[name].__class__, '__set__')):
|
|
|
20 cls.__dict__[name].__set__(self, name, value)
|
|
127
|
21 return
|
|
|
22 self.__dict__[name] = value
|
|
124
|
23
|
|
|
24 def del_attr(thing, name):
|
|
230
|
25 if hasattr(thing.__class__, '__delattr__'):
|
|
126
|
26 thing.__delattr__(name)
|
|
127
|
27 return
|
|
171
|
28 for cls in self.__class__.mro():
|
|
231
|
29 if (name in cls.__dict__ and
|
|
|
30 hasattr(cls.__dict__[name].__class__, '__delete__')):
|
|
|
31 cls.__dict__[name].__delete__(self, name)
|
|
127
|
32 return
|
|
|
33 del self.__dict__[name]
|
|
124
|
34 }}} |