class Delegator: | |
# The cache is only used to be able to change delegates! | |
def __init__(self, delegate=None): | |
self.delegate = delegate | |
self.__cache = {} | |
def __getattr__(self, name): | |
attr = getattr(self.delegate, name) # May raise AttributeError | |
setattr(self, name, attr) | |
self.__cache[name] = attr | |
return attr | |
def resetcache(self): | |
for key in self.__cache: | |
try: | |
delattr(self, key) | |
except AttributeError: | |
pass | |
self.__cache.clear() | |
def cachereport(self): | |
keys = list(self.__cache.keys()) | |
keys.sort() | |
print(keys) | |
def setdelegate(self, delegate): | |
self.resetcache() | |
self.delegate = delegate | |
def getdelegate(self): | |
return self.delegate |