Code Explanation:
1. Defining the class
class One:
This line defines a class named One.
The goal of this class is to allow only one object to be created.
2. Class variable to store the instance
_obj = None
_obj is a class variable.
It will store the single instance of the class.
Initially, it is set to None (meaning no object exists yet).
3. Overriding the __new__ method
def __new__(cls):
__new__ is a special method responsible for creating objects.
It runs before __init__.
cls refers to the class (One), not an instance.
4. Checking if an object already exists
if not cls._obj:
This checks whether _obj is still None.
If True, it means no instance has been created yet.
5. Creating the object
cls._obj = super().__new__(cls)
super().__new__(cls) creates a new object of class One.
The newly created object is stored in cls._obj.
This step happens only once.
6. Returning the same object every time
return cls._obj
Whether a new object was created or not, this line always returns the same instance.
So every call to One() gives back the same object.
7. Creating the first reference
a = One()
Since _obj is None, a new object is created.
a now refers to that single instance.
8. Creating the second reference
b = One()
_obj already exists.
No new object is created.
b refers to the same object as a.
9. Identity comparison
print(a is b)
is checks whether both variables point to the same object in memory.
Since a and b refer to the same instance, the result is:
True
Final Output
True

0 Comments:
Post a Comment