class Car(object):
def __init__(self, color, engine, oil):
self.color = color
self.__engine = engine
self.__oil = oil
a = Car('black', 'a cool engine', 'some cool oil')
We assume that __engine and __oil variables are private which means I cannot access them through a call like a.__engine. However, I can use __dict__ variable to access and even change those variables.
# Accessing
a.__dict__
{'_Car__engine': 'a cool engine', 'color': 'black', '_Car__oil': 'some cool oil'}
# Changing
a.__dict__['_Car__engine'] = "yet another cool engine"
a.__dict__
{'_Car__engine': 'yet another cool engine', 'color': 'black', '_Car__oil': 'some cool oil'}
The problem is simple. I want private variables to be accessed and changed only inside the class.
The problem is simple. I want private variables to be accessed and changed only inside the class.
So, don't write code outside the class that accesses variables starting with __
. Use pylint or the like to catch style mistakes like that.
What you are trying to do is not possible in Python.
“Private” instance variables that cannot be accessed except from inside an object don’t exist in Python.
https://docs.python.org/2/tutorial/classes.html#private-variables-and-class-local-references
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With