+ 1
class Myclass : def __init__(self,val): self .__n=val obj=Myclass(0) obj.__n=1 print (obj._Myclass__n )
How output of this code is 0
6 Answers
+ 7
a class named Myclass is defined, which has a constructor __init__ that initializes an instance variable __n with the value passed as argument. Then an object obj is created with the argument 0.
Next, the code tries to set the value of __n to 1 using the syntax obj.__n=1. However, since __n is a private variable (indicated by the double underscores), Python interprets this as a new instance variable being created and added to obj, rather than changing the value of the existing __n variable.
Finally, the code prints the value of obj._Myclass__n. Here, the syntax _Myclass__n is used to access the private variable __n of the Myclass class. This works because Python actually stores private variables with a name that includes the class name (with a leading underscore), so the variable can still be accessed from outside the class, but the syntax is a bit more cumbersome.
Since the original value of obj.__n was never changed (instead, a new instance variable was created), its value remains 0. Therefore, it is 0.
+ 4
obj is assigned to Myclass with an attribute value of 0, and because the __init__ method assigns this argument value to a name with a double underscore __n the interpreter distorts it in _Myclass__n which is printed.
+ 2
Because if you want to change the value you need a set function for __n
0
Great
0
Sadaam Linux Is it a ChatGPT generated answer?
0
This topic is covered in the lesson 77.1 Data Hiding of the Python Core course.