a staticmethod
- это метод, для которого в качестве первого параметра не требуется объект. Это означает, что это метод, полезный для самого класса и всех его экземпляров, а не просто его экземпляров (объект инициализирован как A()
.
Что это означает на практике, так это то, что Python неявно отправляет сам объект в качестве параметра. Ваш первый метод сломается, как только вы его назовете:
>>> a.foo()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: foo() takes 0 positional arguments but 1 was given
Это потому, что Python предоставляет методы объекта с самим объектом в качестве первого параметра. Отсюда и повсеместный аргумент о себе:
def foo(self): #Proper signature
С другой стороны,
A.bar()
будет работать просто отлично, и так будет
a.bar()
Объект не указан в качестве первого аргумента. Используйте staticmethod
s для методов, которые должны быть полезны для класса и его экземпляров, но не требуют знания ни того, ни другого. Обычно я использую их как служебные функции.
Обратите внимание, что существует третья версия , classmethod
, которая похожа на обычный метод в том, что она принимает первый параметр по умолчанию - класс вызывающей стороны. В этом случае минимальная подпись
@classmethod
def operateOnClass(cls):
Используйте это для внесения изменений, которые влияют на все экземпляры, например, для изменения переменных класса.