"Casey McGinty" <[EMAIL PROTECTED]> wrote in message news:[EMAIL PROTECTED] | On Thu, Jun 5, 2008 at 5:40 AM, Gabriel Rossetti < | [EMAIL PROTECTED]> wrote: | | > Hello everyone, | > | > I had read somewhere that it is preferred to use self.__class__.attribute | > over ClassName.attribute to access class (aka static) attributes. I had done | > this and it seamed to work, until I subclassed a class using this technique | > and from there on things started screwing up. I finally tracked it down to | > self.__class__.attribute! What was happening is that the child classes each | > over-rode the class attribute at their level, and the parent's was never | > set, so while I was thinking that I had indeed a class attribute set in the | > parent, it was the child's that was set, and every child had it's own | > instance! Since it was a locking mechanism, lots of fun to debug... So, I | > suggest never using self.__class__.attribute, unless you don't mind it's | > children overriding it, but if you want a truly top-level class attribute, | > use ClassName.attribute everywhere! | | Thanks for the info. Can anyone explain more about the differences between | the two techniques? Why does one work and the other one fail?
If you want to access the attribute of a particular class, to read or write, use that class. SomeClass.attr Note that no instance is required or relevant. If you want to read the attrubute of the class of an instance (or the first superclass with the attribute, whatever that class might be, use self.attr or self.__class__.attr. (Use the latter if the instance has (or might have) an attribute of the same name). For setting an attribute, self.attr = x sets it on the instance while self.__class__.attr = x sets it on its class. -- http://mail.python.org/mailman/listinfo/python-list