+++ /dev/null
-import types\r
-\r
-class Tracing:\r
- def __init__(self, name, bases, namespace):\r
- """Create a new class."""\r
- self.__name__ = name\r
- self.__bases__ = bases\r
- self.__namespace__ = namespace\r
- def __call__(self):\r
- """Create a new instance."""\r
- return Instance(self)\r
-\r
-class Instance:\r
- def __init__(self, klass):\r
- self.__klass__ = klass\r
- def __getattr__(self, name):\r
- try:\r
- value = self.__klass__.__namespace__[name]\r
- except KeyError:\r
- raise AttributeError, name\r
- if type(value) is not types.FunctionType:\r
- return value\r
- return BoundMethod(value, self)\r
-\r
-class BoundMethod:\r
- def __init__(self, function, instance):\r
- self.function = function\r
- self.instance = instance\r
- def __call__(self, *args):\r
- print "calling", self.function, "for", self.instance, "with", args\r
- return apply(self.function, (self.instance,) + args)\r
-\r
-Trace = Tracing('Trace', (), {})\r
-\r
-class MyTracedClass(Trace):\r
- def method1(self, a):\r
- self.a = a\r
- def method2(self):\r
- return self.a\r
-\r
-aninstance = MyTracedClass()\r
-\r
-aninstance.method1(10)\r
-\r
-print aninstance.method2()\r