Advanced Lesson 2
Advanced Object-Oriented Programming
Chapter 4: Class attributes and methods
Class methods
Like class attributes, you can also have class methods that are bound to the class (and not to the class instance).
A class method takes the class (cls
) as its first argument, rather than the class instance (self
) as in an instance method.
Thus, class methods do not have access to the object instance (via self
), but only the class (via cls
). Therefore, it does not have access to any instance attributes or methods.
Writing a class method is just like writing an instance method, except that you define cls
instead of self
as the first argument (PEP 8 recommends this convention). You will also need to annotate the method with a @classmethod
decorator (Line 9). This decorator allows Python to know that cls
is a class, and not an instance!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
Like class attributes, you can access a class method with either the ClassName
(Line 14) or an instance_name
(Line 15).
When Line 14 is executed, Python will pass Person
as the first parameter cls
. Therefore, cls.count
(Line 11) is actually Person.count
.
When Line 15 is executed, the same will happen. Python will figure out that lecturer
is an instance of Person
. Since get_population()
is annotated as a class method, Python will pass the class name Person
as the first parameter instead of the lecturer
instance.
If you are from a C++/Java background: a class method in Python is actually equivalent to a static method in C++/Java. As we will see in a bit, a static method in Python is a completely different thing! Pure confusion! 😵😵😵