ClassName.attribute vs self.__class__.attribute

Casey McGinty casey.mcginty at gmail.com
Thu Jun 5 16:41:32 EDT 2008


On Thu, Jun 5, 2008 at 5:40 AM, Gabriel Rossetti <
gabriel.rossetti at arimaz.com> 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!
>
> I wish books and tutorials mentioned this explicitly....
>
> Gabriel
> --
> http://mail.python.org/mailman/listinfo/python-list
>

Thanks for the info. Can anyone explain more about the differences between
the two techniques? Why does one work and the other one fail?
Casey
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20080605/33bfa655/attachment-0001.html>


More information about the Python-list mailing list