Code:
class MyClass:
x = 1
p1 = MyClass()
p2 = MyClass()
p1.x = 2
print(p2.x)
Solution and Explanation:
Let's break down the code:
class MyClass:
x = 1
p1 = MyClass()
p2 = MyClass()
p1.x = 2
print(p2.x)
Class Definition (MyClass):
Here, a class named MyClass is defined.
Inside the class, there's a class variable x initialized with the value 1.
Object Instantiation:
Two instances of the class MyClass are created: p1 and p2.
Instance Variable Assignment (p1.x = 2):
The instance variable x of p1 is set to 2. This doesn't modify the class variable x but creates a new instance variable x for p1.
Print Statement (print(p2.x)):
This statement prints the value of x for the instance p2. Since p2 hasn't had its x modified, it still references the class variable x which has a value of 1. Thus, it prints 1.
Let's dissect the crucial part, p1.x = 2:
When p1.x = 2 is executed, Python first checks if p1 has an attribute x. If not, it looks for it in the class definition.
Since p1 didn't have an x attribute, Python creates one for p1, setting its value to 2.
This doesn't change the class variable x itself or affect other instances of MyClass, such as p2. Each instance of the class maintains its own namespace of attributes.
Hence, when print(p2.x) is called, it prints 1 because p2 still references the class variable x, which remains unaffected by the modification of p1.x.
0 Comments:
Post a Comment