__init__ and arguments in Python __init__ and arguments in Python python python

__init__ and arguments in Python


In Python:

  • Instance methods: require the self argument.
  • Class methods: take the class as a first argument.
  • Static methods: do not require either the instance (self) or the class (cls) argument.

__init__ is a special function and without overriding __new__ it will always be given the instance of the class as its first argument.

An example using the builtin classmethod and staticmethod decorators:

import sysclass Num:    max = sys.maxint    def __init__(self,num):        self.n = num    def getn(self):        return self.n    @staticmethod    def getone():        return 1    @classmethod    def getmax(cls):        return cls.maxmyObj = Num(3)# with the appropriate decorator these should work finemyObj.getone()myObj.getmax()myObj.getn()

That said, I would try to use @classmethod/@staticmethod sparingly. If you find yourself creating objects that consist of nothing but staticmethods the more pythonic thing to do would be to create a new module of related functions.


Every method needs to accept one argument: The instance itself (or the class if it is a static method).

Read more about classes in Python.


The fact that your method does not use the self argument (which is a reference to the instance that the method is attached to) doesn't mean you can leave it out. It always has to be there, because Python is always going to try to pass it in.