Python: Private variables
To make Python treat a variable as pseudo-private, follow the convention of putting two
underscores (i.e., __
) at the beginning of the variable’s name, e.g.:
class Enki:
def __init__(self):
self.__private = 3.14
print(self.__private)
enki = Enki() # prints 3.14
In effect, Python renames the variable using the _classname__varname
pattern.
If we try to access the original __private
variable name, an error is thrown:
>>> print(enki.__private)
AttributeError .. no __private attribute
It is possible to access it through _classname__varname
, but it’s not recommended to
access variables in this way, because it is an implementation detail and may break in the
future.
>>> print(enki._Enki__private)
prints 3.14
Update:
The double underscore (
__
) is primarily used for “name mangling” to ensure that subclasses don’t have overlapping methods. A single underscore (_
) is a convention so that anyone looking at the code will know that it’s an implementation-specific attribute. As a handy side effect,from package import *
won’t import attributes starting with underscores.
Via enkipro.com.
Leave a comment