Private functions and inheritance

Bjoern Schliessmann usenet-mail-0306.20.chr0n0ss at spamgourmet.com
Mon Jul 16 10:54:18 EDT 2007


Maciej Blizi?ski wrote:

> calling B::call_bar(): B::bar()
> calling B::call___bar(): A::__bar()

(BTW, there is no :: operator in Python. It should be, e. g., 
B.bar().)

> In the latter case, it calls the base class' implementation. It
> probably goes along with Python's spec, but I found it surprising.

__-prepended names are dynamically mangled to include the class
name. Hence, B.__bar doesn't overwrite A.__bar in B.

> I don't want to expose the __bar() function outside,

In principle, you do. Always. Public or Private is just convention
in Python. Even __-prepended names can be accessed from outside.

Couldn't find it in the docs though. Quite inconcise.

Regards,


Björn

-- 
BOFH excuse #120:

we just switched to FDDI.




More information about the Python-list mailing list