Introspection Class/Instance Name
Duncan Booth
duncan.booth at invalid.invalid
Wed Apr 26 04:09:20 EDT 2006
More information about the Python-list mailing list
Wed Apr 26 04:09:20 EDT 2006
- Previous message (by thread): Introspection Class/Instance Name
- Next message (by thread): Introspection Class/Instance Name
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
*binarystar* wrote:
> class Bollocks:
>
> def __init__( self ):
>
> print self.__method_that_returns_class_name__()
> print self.__method_that_returns_instance_name__()
>
>
> instance_of_bollocks = Bollocks()
>
> # Which outputs
>
> 'Bollocks'
> 'instance_of_bollocks'
>
>>> class Bollocks(object):
def name_of_instance(self):
return "self"
>>> instance_of_bollocks = Bollocks()
>>> print instance_of_bollocks.__class__.__name__
Bollocks
>>> print instance_of_bollocks.name_of_instance()
self
>>>
At the time when the method is called, 'self' is a perfectly valid name for
the instance. Seriously though, how do you expect a method to decide if you
do:
>>> another_name = instance_of_bollocks
>>> print another_name.name_of_instance()
??? which name should appear here ???
>>> more = [another_name]*5
>>> print more[2]
??? and what name here ???
and did you want a global name, or a local variable from some function and
if so which function and at which stack level?
Python does actually give you sufficient introspection to do this, but you
have to write some fairly complex code to iterate through the namespaces
you are interested in searching for the object.
A much more reasonable solution is to give your object a name attribute:
>>> class Bollocks(object):
def __init__(self, name):
self.name = name
>>> instance_of_bollocks = Bollocks('Archimedes')
>>> print instance_of_bollocks.name
Archimedes
- Previous message (by thread): Introspection Class/Instance Name
- Next message (by thread): Introspection Class/Instance Name
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
More information about the Python-list mailing list