substitution of a method by a callable object

netimen netimen at gmail.com
Thu Oct 23 07:34:34 CEST 2008


On 23 окт, 00:26, Bruno Desthuilliers
<bdesth.quelquech... at free.quelquepart.fr> wrote:
> 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.

Thanks! I have wasted much time playing with different Foo.meth trying
to get to Obj through them. But im_func was one of the fields I
haven't checked )

Indeed, I have managed already without that. The task was to
substitute __str__ method by a complex formatter. It called a low-
level formatter, a function wich returned simple str(self). That
function could be called with objects with substituted formatters and
with simple objects. So to avoid recursion I wanted to check wether
the formatter of my object was substituted.



More information about the Python-list mailing list