]> git.proxmox.com Git - mirror_edk2.git/blob - AppPkg/Applications/Python/Python-2.7.2/Demo/metaclasses/Simple.py
EmbeddedPkg: Extend NvVarStoreFormattedLib LIBRARY_CLASS
[mirror_edk2.git] / AppPkg / Applications / Python / Python-2.7.2 / Demo / metaclasses / Simple.py
1 import types
2
3 class Tracing:
4 def __init__(self, name, bases, namespace):
5 """Create a new class."""
6 self.__name__ = name
7 self.__bases__ = bases
8 self.__namespace__ = namespace
9 def __call__(self):
10 """Create a new instance."""
11 return Instance(self)
12
13 class Instance:
14 def __init__(self, klass):
15 self.__klass__ = klass
16 def __getattr__(self, name):
17 try:
18 value = self.__klass__.__namespace__[name]
19 except KeyError:
20 raise AttributeError, name
21 if type(value) is not types.FunctionType:
22 return value
23 return BoundMethod(value, self)
24
25 class BoundMethod:
26 def __init__(self, function, instance):
27 self.function = function
28 self.instance = instance
29 def __call__(self, *args):
30 print "calling", self.function, "for", self.instance, "with", args
31 return apply(self.function, (self.instance,) + args)
32
33 Trace = Tracing('Trace', (), {})
34
35 class MyTracedClass(Trace):
36 def method1(self, a):
37 self.a = a
38 def method2(self):
39 return self.a
40
41 aninstance = MyTracedClass()
42
43 aninstance.method1(10)
44
45 print aninstance.method2()