Added a test for the ability to specify a class attribute in Formatter configuration...
[python.git] / Demo / metaclasses / Simple.py
blob03ed2592eefa8d71a6e24d41646ac6f855ba2546
1 import types
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)
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)
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)
33 Trace = Tracing('Trace', (), {})
35 class MyTracedClass(Trace):
36 def method1(self, a):
37 self.a = a
38 def method2(self):
39 return self.a
41 aninstance = MyTracedClass()
43 aninstance.method1(10)
45 print aninstance.method2()