On 23 окт, 00:26, Bruno Desthuilliers <[EMAIL PROTECTED]> 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. -- http://mail.python.org/mailman/listinfo/python-list