В Python:
- Методы экземпляра: требуется аргумент
self
. - Методы класса: принимают класс какпервый аргумент.
- Статические методы: не требуют аргумента экземпляра (
self
) или класса (cls
).
__init__
являетсяспециальная функция и без переопределения __new__
ей всегда будет дан экземпляр класса в качестве первого аргумента.
Пример использования встроенных декораторов метода и статического метода:
import sys
class 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.max
myObj = Num(3)
# with the appropriate decorator these should work fine
myObj.getone()
myObj.getmax()
myObj.getn()
Тем не менее, я бы попытался использовать @classmethod
/ @staticmethod
экономно.Если вы обнаружите, что создаете объекты, которые состоят только из staticmethod
s, то более питонская вещь, которую нужно сделать, - создать новый модуль связанных функций.