Home | History | Annotate | Download | only in idlelib
      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 = set()
      8 
      9     def __getattr__(self, name):
     10         attr = getattr(self.delegate, name) # May raise AttributeError
     11         setattr(self, name, attr)
     12         self.__cache.add(name)
     13         return attr
     14 
     15     def resetcache(self):
     16         for key in self.__cache:
     17             try:
     18                 delattr(self, key)
     19             except AttributeError:
     20                 pass
     21         self.__cache.clear()
     22 
     23     def setdelegate(self, delegate):
     24         self.resetcache()
     25         self.delegate = delegate
     26