Override a method but inherit the docstring

Steven D'Aprano steve at REMOVE-THIS-cybersource.com.au
Fri Jul 17 03:52:19 EDT 2009


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



More information about the Python-list mailing list