Who am I: can a class instance determine its own name?

matthias.oberlaender at daimlerchrysler.com matthias.oberlaender at daimlerchrysler.com
Thu Mar 8 05:11:11 EST 2001


> "Tim CHURCHES" <TCHUR at doh.health.nsw.gov.au> wrote in message
> news:mailman.984034150.9635.python-list at python.org...
> This is probably an elementary question and the answer is probably writ
> large in multiple places in the Python documentation, but...
> 
> ...can an instance of a class determine the name of the variable to which 
it
> is assigned? For example:
> 
> ###########################
> class Foo:
>     def whoami(self):
>          return "You are a Foo() but I do not know your name"
> 
> FooBar = Foo()
> 
> print FooBar.whoami()
> ###########################
> 
> How does one define the method whoami() so that it returns "FooBar"? This
> sort of navel gazing is formally called introspection, I think (therefore I
> am)?
> 
> Tim Churches
> Sydney, Australia
> (where, due to the Coriolis effect, the Python prompt does indeed look like
> this: <<< - or maybe its because we are upside-down)

In <UPHp6.38461$1D5.1679137 at e420r-atl1.usenetserver.com> "Steve Holden" 
wrote:
> This question recurs so frequently I would appreciate knowing of any
> omprovement which could be made to FAQ entry 4.97: How can my code discover
> the name of an object?
> 
http://www.python.org/doc/FAQ.html seems to be out of data. I could not find 
4.97 on that page.
However,  the wizard finds it:
http://www.python.org/cgi-bin/faqw.py?query=4.97&querytype=simple&casefold=y
es&req=search

> This tries to address the question in a helpful manner.
> 
Yes, but here is something more constructive:

>>> def howDoYouCall(me, here):
..   # return a list of names whose value is identical to 'me' in namespace 
'here'
..   result = []
...   for (name, value) in here.items():
...     if value is me: result.append(name)
...   return result
...   
... 
>>> x = 5
>>> y = 3
>>> z = None
>>> 
>>> howDoYouCall(3, globals())
['y']
>>> howDoYouCall(5, globals())
['x']
>>> howDoYouCall(None, globals())
['__doc__', 'z']
>>> 

Does this help a bit?

--
 ____  __  _/_/ . 
( / / ( /  / / /  

=====================================================================
Matthias Oberlaender, DaimlerChrysler AG, Research Center Ulm
FT3/AB (Information Technology / Image Understanding)
Wilhelm-Runge-Str. 11,  P.O. Box 2360,  89013 Ulm, Germany
Phone: +49 731 505 2354       Fax: +49 731 505 4113
Email: matthias.oberlaender at daimlerchrysler.com
=====================================================================





More information about the Python-list mailing list