Code Explanation:
1. Defining the Descriptor Class
class Desc:
A new class named Desc is created.
This class will act as a descriptor, meaning it controls attribute access.
2. Implementing the __get__ Method
def __get__(self, obj, owner):
return 100
__get__ is a special descriptor method.
It is called whenever the attribute (to which this descriptor is attached) is read or accessed.
Parameters:
obj → the instance of the class accessing the attribute (e.g., d)
owner → the class in which the descriptor is defined (e.g., Demo)
It returns the fixed value 100 every time.
That means no value is stored — the result is always computed/returned dynamically.
3. Creating a Second Class That Uses the Descriptor
class Demo:
x = Desc()
A class named Demo is created.
Inside it, the class attribute x is assigned an instance of Desc.
This means:
Attribute x is controlled by the descriptor.
From now on, whenever x is accessed through an object of Demo, Python will call Desc.__get__.
4. Creating an Object of Demo
d = Demo()
An object d of the class Demo is created.
It does not store any value in d.x directly — because x is not a normal attribute.
5. Accessing the Descriptor Attribute
print(d.x)
Here is what Python does behind the scenes:
It sees d.x
Python notices that x is a descriptor
So it calls:
Desc.__get__(<Desc instance>, d, Demo)
__get__ returns 100
So the printed result is:
100
Final Output
Output:
100


0 Comments:
Post a Comment