Hi, Consider the following small script.
My understanding of how this works is that, conceptually, class B holds a separate copy of variable x from class A. Nearly everything behaves the way I would expect, except that setting x to 12 in A using class_setx at the beginning also sets the value for x in B. However, the converse (setting x in B using class_setx), does not change the value in A, which I would consider to be the expected behavior. However, after that the two x variables appear to behave independently. Can anyone explain to me why this is so? Regards, Faheem Mitha. ****************************************************************** #!/usr/bin/python class A(object): x = 0 def class_getx(cls): return cls.x class_getx = classmethod(class_getx) def class_setx(cls, _x): cls.x = _x class_setx = classmethod(class_setx) def getx(self): return type(self).x def setx(self, _x): type(self).x = _x class B(A): pass def printx(): print "*** begin printing values of x... ***" print "Fetching from A using class_getx gives %s"%(A.class_getx()) print "Fetching from B using class_getx gives %s"%(B.class_getx()) print "Fetching from A using instance a and getx gives %s"%(a.getx()) print "Fetching from B using instance b and getx gives %s"%(b.getx()) print "*** end printing values of x... ***" a = A() b = B() printx() print "setting x to 12 in A using class_setx"; A.class_setx(12) printx() print "setting x to 15 in B using class_setx"; B.class_setx(15) printx() print "setting x to 10 in A using class_setx" A.class_setx(10) printx() print "setting x to 44 in A using instance a and setx"; a.setx(55) printx() print "setting x to 22 in B using instance b and setx"; b.setx(22) printx() -- http://mail.python.org/mailman/listinfo/python-list