__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 staticmethod
s 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).