substitution of a method by a callable object
Bruno Desthuilliers
bdesth.quelquechose at free.quelquepart.fr
Wed Oct 22 16:26:20 EDT 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