mirror of
				https://github.com/python/cpython.git
				synced 2025-10-31 13:41:24 +00:00 
			
		
		
		
	
		
			
	
	
		
			35 lines
		
	
	
	
		
			832 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			35 lines
		
	
	
	
		
			832 B
		
	
	
	
		
			Python
		
	
	
	
	
	
|   | 
 | ||
|  | 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.keys(): | ||
|  |             try: | ||
|  |                 delattr(self, key) | ||
|  |             except AttributeError: | ||
|  |                 pass | ||
|  |         self.__cache.clear() | ||
|  | 
 | ||
|  |     def cachereport(self): | ||
|  |         keys = self.__cache.keys() | ||
|  |         keys.sort() | ||
|  |         print keys | ||
|  | 
 | ||
|  |     def setdelegate(self, delegate): | ||
|  |         self.resetcache() | ||
|  |         self.delegate = delegate | ||
|  | 
 | ||
|  |     def getdelegate(self): | ||
|  |         return self.delegate |