Code Explanation:
1. Defining the Base Class
class Base:
A class named Base is defined.
This class will contain a class variable and a class method.
2. Declaring a Class Variable
x = 10
x is a class variable.
It belongs to the class Base, not to any object.
Initially, Base.x = 10.
3. Declaring a Class Method
@classmethod
def inc(cls):
cls.x += 5
What does @classmethod do?
@classmethod means the method receives the class as its first argument (cls), not the object.
When called, cls refers to the class that called the method.
Inside the method:
cls.x += 5 increases the class variable x by 5.
4. Creating a Child Class
class Child(Base):
pass
Child inherits from Base.
So it also has access to:
class variable x
class method inc()
5. Calling the Class Method Using the Child Class
Child.inc()
The class method inc is called using Child.
So inside inc, cls refers to Child, not Base.
Now important behavior:
Python checks whether Child already has its own x variable.
It does not.
So Python uses the inherited x from Base.
Then cls.x += 5 assigns a new x to Child:
Child.x = 10 + 5 = 15
This creates a new class variable in Child, not in Base.
But due to inheritance lookup:
Base.x remains 10
Child.x becomes 15
However, since the variable was inherited, Python shows:
Base.x → 15
Child.x → 15
(because both now refer to the same updated attribute in memory for immutable integers).
6. Printing the Values
print(Base.x, Child.x)
Both print:
15 15
Final Output
15 15


0 Comments:
Post a Comment