0 votes
1 view
in Python by (47.8k points)

I'm coming from the Java world and reading Bruce Eckels' Python 3 Patterns, Recipes and Idioms.

While reading about classes, it goes on to say that in Python there is no need to declare instance variables. You just use them in the constructor, and boom, they are there.

So for example:

class Simple:

    def __init__(self, s):

           print("inside the simple constructor")

           self.s = s

   def show(self):

           print(self.s)

   def showMsg(self, msg):

           print(msg + ':', self.show())

If that’s true, then any object of class Simple can just change the value of variable s outside of the class.

For example:

if __name__ == "__main__":

           x = Simple("constructor argument")

           x.s = "test15" # this changes the value

           x.show()

           x.showMsg("A message")

In Java, we have been taught about public/private/protected variables. Those keywords make sense because at times you want variables in a class to which no one outside the class has access to.

Why is that not required in Python?

1 Answer

0 votes
by (107k points)

We do not write to other classes' instance or class variables in Python. But in Java, nothing prevents you from doing the same if you really want to write it, after all, you can always edit the source of the class itself to achieve the same effect.

To emulate the private variables in Python for some reason, you can always use the __ prefix from PEP 8. Python combines the names of variables like __foo so that those variables do not easily visible to code outside the class that contains them 

So the meaning of the _ prefix is “stay away even if you're not technically prevented from doing so”.  It means you don't play around with another class's variables that look like __foo or _bar.

Related questions

0 votes
1 answer
0 votes
1 answer
asked Oct 14, 2019 in Python by Sammy (47.8k points)
+2 votes
3 answers
Welcome to Intellipaat Community. Get your technical queries answered by top developers !


Categories

...