While regular class methods take in the class instance as the first parameter, @classmethod and @staticmethod are available in Python to create class methods with different behavior and usage.
@staticmethod
- does not take in the class or the instance as the implicit first parameter
- can be called on either the class or an instance
- cannot access class or instance properties
A typical usage might be to store any general utility function to the class, such as when the arguments have nothing to do with the class or its instances.
class Foo: @staticmethod def add(a,b): return a + b Foo.add(3,12)
@classmethod
- takes the class in as the implicit first parameter
- can be called on either the class or an instance
- has access to class properties
A typical usage might be to create new class instances with some alternative call signature:
class Foo: def __init__(self, a, b): self.a = a self.b = b @classmethod def bar(cls, a, c): return cls(a, c**2) standard = Foo(2,9) alternate = Foo.bar(2,3)