Search code examples
pythonselfclass-method

What does 'self' refer to in a @classmethod?


I thought I was starting to get a grip on "the Python way" of programming. Methods of a class accept self as the first parameter to refer to the instance of the class whose context the method is being called in. The @classmethod decorator refers to a method whose functionality is associated with the class, but which doesn't reference a specific instance.

So, what does the first parameter of a @classmethod (canonically 'self') refer to if the method is meant to be called without an instance reference?


Solution

  • class itself:

    A class method receives the class as implicit first argument, just like an instance method receives the instance.

    class C:
        @classmethod
        def f(cls):
            print(cls.__name__, type(cls))
    
    >>> C.f()
    C <class 'type'>
    

    and it's cls canonically, btw