In Python, a method provides functionality to a Class.
There are, broadly, three types of methods:
- Class Methods : Provide functionality to a class itself
- Instance Methods : Provide functionality to one instance of a class
- Static Methods : Provide functionality that can be accessed from a class or from one instance of a class
Consider the following Python class, which defines a Person
object and the methods which allow that object to say "hello":
class Person(): # (Discussing __init__ is beyond the scope of this # tutorial) def __init__(self, first_name): self.first_name = first_name # Instance methods are the default method type in a # class definition. They receive the class instance # itself as their first argument. By convention, # the parameter for this argument is labeled 'self'. def say_hi_from_an_instance(self): print(f"Hello! My name is {self.first_name}.") # Class methods are defined using a special # decorator, and receive the class as the first # argument. By convention, the parameter for this # argument is labeled 'cls'. @classmethod def say_hi_from_the_class(cls): print(f"Hello! I am a {cls.__name__}.") # Static methods are defined using a special # decorator. They are available on the class and on # instances of the class. @staticmethod def say_hi_from_anywhere(): print("Why, hello!!!")
Now, from the class:
# We can call the class method greeting > Person.say_hi_from_the_class() Hello! I am a Person. # But we cannot call the instance method greeting > Person.say_hi_from_an_instance() Traceback ... TypeError: say_hi_from_an_instance() missing 1 required positional argument: 'self'
While, from an instance of the class:
> a_person = Person('Louise') # We can call the instance method greeting > a_person.say_hi_from_an_instance() Hello! My name is Louise. # And we can still call the class method greeting > a_person.say_hi_from_the_class() Hello! I am a Person.
Static methods are available on both classes and class instances. They are intended to provide functionality that does not rely on the class or instance itself:
> Person.say_hi_from_anywhere() Why, hello!!! > a_person.say_hi_from_anywhere() Why, hello!!!
See also: Ruby: class methods vs. instance methods
Was this helpful? Did I save you some time?
Top comments (0)