| Line | |
|---|
| 1 | class Delegator:
|
|---|
| 2 |
|
|---|
| 3 | # The cache is only used to be able to change delegates!
|
|---|
| 4 |
|
|---|
| 5 | def __init__(self, delegate=None):
|
|---|
| 6 | self.delegate = delegate
|
|---|
| 7 | self.__cache = {}
|
|---|
| 8 |
|
|---|
| 9 | def __getattr__(self, name):
|
|---|
| 10 | attr = getattr(self.delegate, name) # May raise AttributeError
|
|---|
| 11 | setattr(self, name, attr)
|
|---|
| 12 | self.__cache[name] = attr
|
|---|
| 13 | return attr
|
|---|
| 14 |
|
|---|
| 15 | def resetcache(self):
|
|---|
| 16 | for key in self.__cache.keys():
|
|---|
| 17 | try:
|
|---|
| 18 | delattr(self, key)
|
|---|
| 19 | except AttributeError:
|
|---|
| 20 | pass
|
|---|
| 21 | self.__cache.clear()
|
|---|
| 22 |
|
|---|
| 23 | def cachereport(self):
|
|---|
| 24 | keys = self.__cache.keys()
|
|---|
| 25 | keys.sort()
|
|---|
| 26 | print keys
|
|---|
| 27 |
|
|---|
| 28 | def setdelegate(self, delegate):
|
|---|
| 29 | self.resetcache()
|
|---|
| 30 | self.delegate = delegate
|
|---|
| 31 |
|
|---|
| 32 | def getdelegate(self):
|
|---|
| 33 | return self.delegate
|
|---|
Note:
See
TracBrowser
for help on using the repository browser.