Class design (information hiding)

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Fri Sep 7 13:05:08 CEST 2007


Alexander Eisenhuth a écrit :
> Hi all,
> 
> I'm wodering how the information hiding in python is ment. 

Conventions...

> As I 
> understand there  doesn't exist public / protected / private  mechanism, 
> but a '_' and '__' naming convention.

Yes.

> As I figured out there is only public and private possible as speakin in 
> "C++ manner".

Nope. It's either 'interface' (no leading underscore),  'implementation' 
(single leading underscore), 'implementation with some protection 
against accidental overriding' (two leading underscores).

> Are you all happy with it.

Can't speak for others, but as far as I'm concerned, I'm perfectly happy 
with this.

> 
> class A:
>     def __init__(self):
>         self.__z = 1
>         self._z = 2
>         self.z = 3
>     def _getX(self):
>         return "X"
>     def __getY(self):
>         return "Y"
>     def doAnything(self):
>         print self.__getY()
> 
> 
> class B(A):
>     def __init__(self):
>         A.__init__(self)
>         print dir (self)
>  >>> b = B()
> ['_A__getY', '_A__z', '__doc__', '__init__', '__module__', '_getX', 
> '_z', 'doAnything', 'z']
> 
> I was a bit surprised about '_A__getY' and '_A__z'.

It's documented.

(snip)

> What is the idea behind the _ and __ naming.

cf above.

You may also want to read this - while C++ is not Java either, some 
advises may still apply:
http://dirtsimple.org/2004/12/python-is-not-java.html

HTH



More information about the Python-list mailing list