Code Explanation:
๐น 1. Class Definition
class Test:
✅ Explanation:
A class Test is created.
It overrides the special method __setattr__.
๐น 2. Overriding __setattr__
def __setattr__(self, name, value):
✅ Explanation:
__setattr__ is called every time you assign a value to an attribute.
Example:
obj.x = 5
internally becomes:
obj.__setattr__("x", 5)
๐น 3. Condition Check
if name == "x":
value = value * 2
✅ Explanation:
If the attribute being assigned is "x":
Modify the value before storing it
Multiply it by 2
๐ In this case:
value = 5 → 10
๐น 4. Calling Parent __setattr__
super().__setattr__(name, value)
✅ Explanation:
This is VERY IMPORTANT
It actually assigns the value to the object
⚠️ Why super() is needed:
If you write:
self.x = value
→ it would call __setattr__ again → infinite recursion
✔️ So we use:
super().__setattr__()
๐น 5. Object Creation
obj = Test()
✅ Explanation:
An object obj of class Test is created.
๐น 6. Assigning Value
obj.x = 5
๐ What happens internally:
Calls:
__setattr__(obj, "x", 5)
Inside method:
Condition matches → value becomes:
10
Then:
super().__setattr__("x", 10)
✔️ So actual stored value is:
x = 10
๐น 7. Accessing Attribute
print(obj.x)
✅ Explanation:
Now x already stored as 10
So it prints:
10
๐ฏ Final Output
10

0 Comments:
Post a Comment