Can I find out (dynamically) where a method is defined?

Gary Herron gherron at islandtraining.com
Mon Jun 9 12:28:42 EDT 2008


Lie wrote:
> On Jun 9, 10:28 pm, allendow... at gmail.com wrote:
>   
>> Hi All.
>>
>> In a complex inheritance hierarchy, it is sometimes difficult to find
>> where a
>> method is defined.  I thought it might be possible to get this info
>> from the
>> method object itself, but it looks like maybe not.  Here is the test
>> case I tried:
>>
>> class A(object):
>>     def method():
>>         pass
>>
>> class B(A):
>>     pass
>>
>> a = A()
>> b = B()
>>
>> print a.method
>> print b.method
>>
>> Since B inherits method from A, I thought that printing b.method might
>> tell
>> me that the definition is in A, but no.  Here's the output:
>>
>> <bound method A.method of <__main__.A object at 0xb7d55e0c>>
>> <bound method B.method of <__main__.B object at 0xb7d55e2c>>
>>
>> This in indistinguishable from the case where B overrides method.
>>
>> So, is there any way to inspect a method to see where (in what class)
>> it
>> is defined?
>>     

You might try the inspect module.  It can give you lots of information 
about a method (even including the file name and line number where it 
was defined).  Poke around and perhaps you can find exactly what you are 
looking for.

Gary Herron




More information about the Python-list mailing list