Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How Do I Make Private Variables Inaccessable in Python? [duplicate]

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.

like image 314
Eray Erdin Avatar asked Jan 25 '15 16:01

Eray Erdin


2 Answers

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.

like image 99
Marcin Avatar answered Oct 19 '22 19:10

Marcin


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

like image 2
Spc_555 Avatar answered Oct 19 '22 20:10

Spc_555