On Fri, 17 Jul 2009 12:58:48 +1000, Ben Finney wrote: >> Using a decorator in this manner requires repeating the super class >> name. Perhaps there is a way to get the bases of BarGonk, but I don't >> think so, because at the time that the decorator is called, BarGonk is >> not yet fully defined. > > Yes, I tried a few different ways, but within the decorator it seems the > function object is quite unaware of what class it is destined for.
When the decorator is called, the function object is just a function object, not a method, so there is no concept of "what class it is destined for". >>> def dec(func): ... print type(func) ... try: ... print func.im_class ... except: ... print "no im_class" ... return func ... >>> class Test(object): ... @dec ... def spam(self): ... pass ... <type 'function'> no im_class >>> type(Test.spam) <type 'instancemethod'> >>> Test.spam.im_class <class '__main__.Test'> I suppose you could try to determine what namespace you're currently when the class is created, but that's surely going to be fragile and messy. -- Steven -- http://mail.python.org/mailman/listinfo/python-list