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)