Adam Atlas wrote: > Is it possible for an object, in its __init__ method, to find out if it > is being assigned to a variable, and if so, what that variable's name > is? I can think of some potentially ugly ways of finding out using > sys._getframe, but if possible I'd prefer something less exotic. > (Basically I have a class whose instances, upon being created, need a > 'name' property, and if it's being assigned to a variable immediately, > that variable's name would be the best value of 'name'; to make the > code cleaner and less redundant, it would be best if it knew its own > name upon creation, just like functions and classes do, without the > code having to pass it its own name as a string.)
As others have mentioned, in general the answer is no. However, class statements do have access to the name they're assigned, so you could abuse a class statement like this:: >>> # your class whose instances need a name property >>> class C(object): ... def __init__(self, name): ... self.name = name ... @classmethod ... def from_class_block(cls, name, bases, blockdict): ... return cls(name) ... >>> # instances of your class with the appropriate names >>> class instance: ... __metaclass__ = C.from_class_block ... >>> instance.name 'instance' Though it doesn't rely on private functions like sys._getframe, it's still sure to confuse the hell out of your users. ;-) STeVe -- http://mail.python.org/mailman/listinfo/python-list