Search code examples
pythonclass-method

Is it bad form to call a classmethod as a method from an instance?


Ex.

If I have something like this:

class C(object):
    @classmethod
    def f(cls, x):
       return x + x

This will work:

c = C()

c.f(2)
4

But is that bad form? Should I only call

C.f()

or

c.__class__.f()

Obviously, this would only make sense in cases where f doesn't interact with self/cls expecting it to be class.

?


Solution

  • If you are tempted to call a class method from an instance you probably don't need a class method.

    In the example you gave a static method would be more appropriate precisely because of your last remark (no self/cls interaction).

    class C(object):
        @staticmethod
        def f(x):
           return x + x
    

    this way it's "good form" to do both

    c = C()
    c.f(2)
    

    and

    C.f(2)