On 28 May 2006 01:07:16 -0700, [EMAIL PROTECTED] wrote: >>> I'm working on a "TempFile" class that stores the data in memory until >>> it gets larger than a specified threshold (as per PEP 42). Whilst >>> trying to implement it, I've come across some strange behaviour. Can >>> anyone explain this? > >>> The test case at the bottom starts a TempFile at size 50 and prints its >>> type. It then increases the size to the threshold at which point >>> "self" is changed to being a TemporaryFile. > >> Changed how ?-) > >Just by being assigned with a TemporaryFile object. I thought that if >you do > >instance = TempFile() > >that "instance" and "self" defined in the Class were the same thing so >that if you changed the class of self, the class of instance would also >change. > >Thanks very much for your example. It has solved my problem and helped >me understand a new pattern at the same time.
Bruno says you _can_ assign to __class__ but calls that "risky". If you ever do feel the urge to assign a new value to some object's __class__ it might be a good idea to first make certain you can predict the behavior of the following: class A: msg = 'A' def hmm(self): print self.msg class B: msg = 'B' def hmm(self): print self.msg x = A() x.hmm() x.__class__ = B x.hmm() class C: def __init__(self): self.msg = 'C' def hmm(self): print self.msg class D: def __init__(self): self.msg = 'D' def hmm(self): print self.msg x = C() x.hmm() x.__class__ = D x.hmm() ************************ David C. Ullrich -- http://mail.python.org/mailman/listinfo/python-list