questions about object references
Ned Deily
nad at acm.org
Fri Aug 7 16:41:53 EDT 2009
In article <786181.46665.qm at web110610.mail.gq1.yahoo.com>,
William <abecedarian314159 at yahoo.com> wrote:
> I have a question. Suppose I do the following:
>
> def myfunc(a,b):
> return a+b
>
> myfunc2=myfunc
>
> is there anyway to find all of the references to myfunc? That is, can I find
> out all of the functions that may be aliased to myfunc?
The general idea is to search the appropriate namespaces and check for
object identity, so something like:
>>> def myfunc(a,b):
... return a+b
...
>>> myfunc2 = myfunc
>>>
>>> name = None
>>> namespace = globals()
>>>
>>> for name in namespace:
... if namespace[name] is myfunc:
... print " %s = %s" % (name, namespace[name])
...
myfunc = <function myfunc at 0xc2670>
myfunc2 = <function myfunc at 0xc2670>
> second question:
>
> class MyClass(object):
> def __init__(a,b):
> self.a=a
> self.b=b
> def myfunc(self):
> return self.a+self.b
>
> myclass=MyClass(3,4)
> myclass.myfunc2=myclass.myfunc
>
> Is there any way to find all the references to myclass.myfunc--in this case,
> myclass.myfunc2?
This is a little trickier since the object you are searching for is a
bound method; while it might seem like it should, testing for object
identity doesn't work. (You'd could test for identity of the function
objects pointed to by the bound methods' __func__ attributes.) However,
plain old test for equality works, so, for example, to search the
instance object's attribute space:
>>> class MyClass(object):
... def __init__(self,a,b):
... self.a=a
... self.b=b
... def myfunc(self):
... return self.a+self.b
...
>>> myclass = MyClass(3,4)
>>> myclass.myfunc2 = myclass.myfunc
>>>
>>> for name in dir(myclass):
... obj = getattr(myclass, name)
... if obj == myclass.myfunc:
... print " %s is %s" % (name, obj)
...
myfunc is <bound method MyClass.myfunc of <__main__.MyClass object at
0xc6d70>>
myfunc2 is <bound method MyClass.myfunc of <__main__.MyClass object at
0xc6d70>>
--
Ned Deily,
nad at acm.org
More information about the Python-list
mailing list