substitution of a method by a callable object

Bruno Desthuilliers bdesth.quelquechose at free.quelquepart.fr
Wed Oct 22 22:26:20 CEST 2008


netimen a écrit :
(snip)
> OK, I have implemented Bruno Desthuilliers example. But there is
> another question: can I having a method determine if it is an instance
> of given class. So:

As the name imply, a method is usually, well, an instance of type 
'method' !-)

> class Obj(object):
(snip)
> 
> class Foo(object):
>     pass
> 
> Foo.meth = Obj()
> 
> ## in some another place of code
> if isinstance(Foo.meth, Obj): # doesn't work because type(Foo.meth) is
> now 'instancemethod'

Indeed. I suppose what you want is to know if the callable wrapped by 
the method is an instance of Obj ?

> 
> Can I determine that?

Yeps. Test the im_func attribute of the method:

    if isinstance(Foo.meth.im_func, Obj): print "yadda"

But you'd better put this in a try/except block, because a callable 
attribute of a class is not necessarily a method - and so it may not 
have an im_func attribute.

Also, may I ask why you want to check this ? Not that it's necessarily 
wrong, but real use case for typechecking are pretty rare.



More information about the Python-list mailing list