Have you ever seen some Python code and wondered what @staticmethod
and @classmethod
do ?
Well, let me explain ...
@staticmethod
A static method is a method that knows nothing about the class or instance it was called on. The class instance, therefore, is NOT passed in as an implicit first argument to the static method.
...
@staticmethod
def do_something(x):
return x
The main advantages to using static methods are that Python does not have to instantiate a bound-method for the object. Additionally, it eases the readability of the code, seeing @staticmethod
we know that the method does not depend on the state of the object itself.
@classmethod
Class methods are methods that are not bound to an object, but to a class. With class methods, the class, NOT the instance is passed as the implicit first argument. This means you can use the class and its properties inside that method rather than a particular instance. For example, this allows you to create class instantiations within your class, making @classmethod
ideal when creating factory methods.
class MyClass(object):
def __init__(self, x, y):
pass
@classmethod
def do_something(cls, z):
x, y = map(str, z.split(' '))
return cls(x, y)
>>> MyClass.do_something('Juniper SRX')
<__main__.MyClass object at 0x7fc523012050>