mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 15:41:43 +00:00 
			
		
		
		
	
		
			
	
	
		
			34 lines
		
	
	
	
		
			831 B
		
	
	
	
		
			Python
		
	
	
	
	
	
		
		
			
		
	
	
			34 lines
		
	
	
	
		
			831 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
							 |