Hi, I have a class with various class-level variables which are used to store global state information for all instances of a class. These are set by a classmethod as in the following (in reality the setcvar method is more complicated than this!):
class sup(object): cvar1 = None cvar2 = None @classmethod def setcvar1(cls, val): cls.cvar1 = val @classmethod def setcvar2(cls, val): cls.cvar2 = val @classmethod def printcvars(cls): print cls.cvar1, cls.cvar2 I can then call setcvar on either instances of the class or the class itself. Now, the problem comes when I want to subclass this class. If I override the setcvar1 method to do some new things special to this class, and then call the sup.setcvar1() method, it all works fine: class sub(sup): cvar1a = None @classmethod def setcvar1(cls, val, vala): cls.cvar1a = vala sup.setcvar1(val) @classmethod def printcvars(cls): print cls.cvar1a sup.printcvars() This works fine, and sets cvar and cvar2 for both classes. However, if I *don't* override the setcvar2 method, but I call sub.setcvar2(val) directly, then only sub.cvar2 gets set; it is no longer identical to sup.cvar1! In particular, sub.setcvar1(1,10) sub.setcvar2(2) sub.printcvars() prints 10 1 None i.e. sub.cvar1, sub.cvar1a, sub.cvar2= 1 10 2 but sup.cvar1, cvar2= 1 None since sup.cvar2 has never been set, and this is what sup.printcvars() looks for. This behavior is "expected", but is it desirable? For my application, at least, I think the problem really comes in the printcvars method: is there any way to call the overridden sup.printcvars() but with, effectively, cls=sub? Thanks for reading this far! Andrew Andrew This seems like a bug Is this expected behavior, or a bug (or both -- it is expected but probably not what is wanted!)? -- http://mail.python.org/mailman/listinfo/python-list