ClassName.attribute vs self.__class__.attribute

Gabriel Rossetti gabriel.rossetti at arimaz.com
Thu Jun 5 11:40:39 EDT 2008


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!

I wish books and tutorials mentioned this explicitly....

Gabriel



More information about the Python-list mailing list