Code Explanation:
1. Defining the Descriptor Class
class D:
A class named D is defined.
This class is going to be used as a descriptor.
2. Defining the __get__ Method
def __get__(self, obj, owner):
return 50
__get__ makes this class a descriptor.
This method is called whenever the attribute is accessed.
Parameters:
self → descriptor object (D instance)
obj → instance accessing the attribute (a)
owner → class owning the descriptor (A)
It always returns 50, no matter what.
3. Defining Class A
class A:
A class named A is defined.
4. Attaching the Descriptor to Class A
x = D()
x is a class attribute.
Its value is an instance of D, so x becomes a descriptor-managed attribute.
5. Creating an Object of Class A
a = A()
An instance a of class A is created.
6. Assigning a Value to a.x
a.x = 10
Python tries to assign 10 to x.
Since the descriptor D does NOT define __set__, this assignment:
Creates an instance attribute:
a.__dict__['x'] = 10
7. Accessing a.x
print(a.x)
Step-by-step attribute lookup:
Python sees that x is a descriptor on class A
Descriptor takes priority over instance attributes
Python calls:
D.__get__(a, A)
__get__ returns 50
The instance value 10 is ignored
8. Final Output
50
✅ Final Answer
✔ Output:
50

0 Comments:
Post a Comment