Code Explanation:
1. Defining the Class
class Cache:
A class named Cache is defined.
2. Defining __getattr__
def __getattr__(self, name):
__getattr__ is a special method.
It is called only when an attribute is NOT found in:
the instance (self.__dict__)
the class
parent classes
3. Creating the Attribute Dynamically
self.__dict__[name] = 7
A new attribute is added to the instance dynamically.
The attribute name is whatever was requested (name).
Its value is set to 7.
Example:
c.a = 7
4. Returning the Value
return 7
The method returns 7.
This value becomes the result of the attribute access.
5. Creating an Object
c = Cache()
An instance c of class Cache is created.
Initially:
c.__dict__ == {}
6. First Access: c.a
c.a
Step-by-step:
Python looks for a in c.__dict__ → not found
Looks in class Cache → not found
Calls __getattr__(self, "a")
Inside __getattr__:
self.__dict__["a"] = 7
Returns 7
Now:
c.__dict__ == {"a": 7}
7. Second Access: c.a
c.a
Step-by-step:
Python looks for a in c.__dict__
Finds a = 7
__getattr__ is NOT called
Value 7 is returned directly
8. Printing the Values
print(c.a, c.a)
First c.a → 7
Second c.a → 7
9. Final Output
7 7
Final Answer
✔ Output:
7 7

0 Comments:
Post a Comment