[Poll] Private variables

Christian Tanzer tanzer at swing.co.at
Thu Sep 13 01:40:08 EDT 2001


"Alex Martelli" <aleax at aleax.it> wrote:

> My personal opinion is that __beep style names serve to avoid
> accidental clashes of identifiers between base and derived
> classes -- you can use that style of identifiers without any
> worries about some ancestor or descendant class duplicating
> it by accident, and that's the only feature that makes them
> really useful.

Unless you use names like these in your hierarchy:

    Python 2.1 (#1, May  2 2001, 18:27:26) 
    [GCC 2.7.2.1] on linux2
    Type "copyright", "credits" or "license" for more information.
    >>> class _A :
    ...   __beep = 1
    ... 
    >>> class A(_A) :
    ...   __beep = 2
    ... 
    >>> class B(A) :
    ...   __beep = 3
    ... 
    >>> dir (_A)
    ['_A__beep', '__doc__', '__module__']
    >>> dir(A)
    ['_A__beep', '__doc__', '__module__']
    >>> dir(B)
    ['_B__beep', '__doc__', '__module__']
    >>> 

The name mangling of `__bar` names misbehaves if the class name starts
with a single underscore. To be able to use `__bar` names safely one
has to avoid `_Foo` class names. 

This is the only example of accidental feature interaction in Python
that I'm aware of. [It once cost me the better part of a day to figure
out why my program suddenly went catatonic.]

-- 
Christian Tanzer                                         tanzer at swing.co.at
Glasauergasse 32                                       Tel: +43 1 876 62 36
A-1130 Vienna, Austria                                 Fax: +43 1 877 66 92





More information about the Python-list mailing list