These files are a subset of the python-2.7.2.tgz distribution from python.org. Changed files from PyMod-2.7.2 have been copied into the corresponding directories of this tree, replacing the original files in the distribution. Signed-off-by: daryl.mcdaniel@intel.com git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@13197 6f19259b-4bc3-4df7-8a09-765794883524
		
			
				
	
	
		
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			46 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
| import types
 | |
| 
 | |
| class Tracing:
 | |
|     def __init__(self, name, bases, namespace):
 | |
|         """Create a new class."""
 | |
|         self.__name__ = name
 | |
|         self.__bases__ = bases
 | |
|         self.__namespace__ = namespace
 | |
|     def __call__(self):
 | |
|         """Create a new instance."""
 | |
|         return Instance(self)
 | |
| 
 | |
| class Instance:
 | |
|     def __init__(self, klass):
 | |
|         self.__klass__ = klass
 | |
|     def __getattr__(self, name):
 | |
|         try:
 | |
|             value = self.__klass__.__namespace__[name]
 | |
|         except KeyError:
 | |
|             raise AttributeError, name
 | |
|         if type(value) is not types.FunctionType:
 | |
|             return value
 | |
|         return BoundMethod(value, self)
 | |
| 
 | |
| class BoundMethod:
 | |
|     def __init__(self, function, instance):
 | |
|         self.function = function
 | |
|         self.instance = instance
 | |
|     def __call__(self, *args):
 | |
|         print "calling", self.function, "for", self.instance, "with", args
 | |
|         return apply(self.function, (self.instance,) + args)
 | |
| 
 | |
| Trace = Tracing('Trace', (), {})
 | |
| 
 | |
| class MyTracedClass(Trace):
 | |
|     def method1(self, a):
 | |
|         self.a = a
 | |
|     def method2(self):
 | |
|         return self.a
 | |
| 
 | |
| aninstance = MyTracedClass()
 | |
| 
 | |
| aninstance.method1(10)
 | |
| 
 | |
| print aninstance.method2()
 |