|
|
class Delegator: |
|
|
|
|
|
def __init__(self, delegate=None): |
|
|
self.delegate = delegate |
|
|
self.__cache = set() |
|
|
|
|
|
|
|
|
|
|
|
def __getattr__(self, name): |
|
|
attr = getattr(self.delegate, name) |
|
|
setattr(self, name, attr) |
|
|
self.__cache.add(name) |
|
|
return attr |
|
|
|
|
|
def resetcache(self): |
|
|
"Removes added attributes while leaving original attributes." |
|
|
|
|
|
|
|
|
for key in self.__cache: |
|
|
try: |
|
|
delattr(self, key) |
|
|
except AttributeError: |
|
|
pass |
|
|
self.__cache.clear() |
|
|
|
|
|
def setdelegate(self, delegate): |
|
|
"Reset attributes and change delegate." |
|
|
self.resetcache() |
|
|
self.delegate = delegate |
|
|
|
|
|
if __name__ == '__main__': |
|
|
from unittest import main |
|
|
main('idlelib.idle_test.test_delegator', verbosity=2) |
|
|
|