Kent Johnson wrote:
Thanks. I think I've run into this sort of behavior before, but didn't remember the details well enough to remember the solution (if I've ever known it). Hopefully this'll be the last of me emails to the Tutor mailing list on this particular problem. ;-)variable, it has no effect outside the method; inside a method, self is just a method parameter, nothing more. There is some magic that gives self its value for the call.When __init__() is called the new instance has already been created, you are just initializing its state, not creating the object. You can do what you want by defining stime.__new__(). __new__() is responsible for actually creating a new object. You still have to check for an stime instance in __init__() because __init__() will be called even when __new__() returns an existing instance. Here is a simplified example: >>> class stime(object): ... def __new__(cls, value): ... if isinstance(value, cls): ... return value ... return object.__new__(cls, value) ... def __init__(self, value): ... print 'stime.__init__', value ... if isinstance(value, stime): ... return ... self.value = value ... >>> a=stime(3) stime.__init__ 3 >>> a <__main__.stime object at 0x00A32E90> >>> b=stime(a) stime.__init__ <__main__.stime object at 0x00A32E90> >>> b <__main__.stime object at 0x00A32E90> >>> a.value 3 >>> b.value 3 >>> a is b True KentAssigning to self in __init__() just changes the value of the local Thanks again, Orri -- Email: singingxduck AT gmail DOT com AIM: singingxduck Programming Python for the fun of it. |
_______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor