Dennis Sweeney <sweeney.dennis...@gmail.com> added the comment:

An attribute name starting with a single underscore is just a warning to users 
of your code that "this attribute is supposed to be private, access it at your 
own risk."

Everything below is from 
https://docs.python.org/3/tutorial/classes.html?highlight=mangle#private-variables
 :

“Private” instance variables that cannot be accessed except from inside an 
object don’t exist in Python. However, there is a convention that is followed 
by most Python code: a name prefixed with an underscore (e.g. _spam) should be 
treated as a non-public part of the API (whether it is a function, a method or 
a data member). It should be considered an implementation detail and subject to 
change without notice.

Since there is a valid use-case for class-private members (namely to avoid name 
clashes of names with names defined by subclasses), there is limited support 
for such a mechanism, called name mangling. Any identifier of the form __spam 
(at least two leading underscores, at most one trailing underscore) is 
textually replaced with _classname__spam, where classname is the current class 
name with leading underscore(s) stripped. This mangling is done without regard 
to the syntactic position of the identifier, as long as it occurs within the 
definition of a class.

Name mangling is helpful for letting subclasses override methods without 
breaking intraclass method calls. For example:

...

----------

_______________________________________
Python tracker <rep...@bugs.python.org>
<https://bugs.python.org/issue44244>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to