substitution of a method by a callable object
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 :
> > 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):
> > 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