To make a method or attribute private

Lie Ryan lie.1296 at gmail.com
Fri Jan 18 02:46:55 EST 2013


On 17/01/13 11:34, iMath wrote:
> To make a method or attribute private (inaccessible from the outside),
> simply start its name with two underscores
>
> ----《Beginning Python From Novice to Professional》
>
> but there is another saying goes:
> Beginning a variable name with a single underscore indicates that the
> variable should be treated as ‘private’.
>
> I test both these 2 rules ,it seems only names that start with two
> underscores are REAL private methods or attributes .

Python does not have a REAL private methods/attributes. The double 
leading underscore is meant to trigger name mangling to avoid naming 
collisions with subclasses, the method/attribute is still accessible 
using the mangled name:

 >>> ap._A__a
'__a'

You generally only use double leading underscores when your private 
method/attribute is in a very high risk of having naming clashes with 
superclasses/subclasses.

 > so what is your opinion about single leading underscore and private
 > methods or attributes?

We're all consenting adults. Use methods/attributes with single or 
double leading underscore at your own risk.

Most programming languages do not actually have a private attribute that 
is totally inaccessible from outside, there are usually ways work around 
access restrictions, usually using reflections or pointers. Python only 
makes it easy to do so by making private variables only a convention.




More information about the Python-list mailing list