@staticmethod
используется для определения статических методов в классе.
Статический метод не принимает неявный первый аргумент (self
или cls
).
Он вызывается непосредственно из класса, а не из экземпляра класса.
class MyClass:
@staticmethod
def my_static_method(arg1, arg2):
return arg1 + arg2
result = MyClass.my_static_method(5, 3) # Calling directly on the class
print(result) # Output: 8
Для добавления статического метода в класс в Python используется декоратор @staticmethod
. Статические методы отличаются от обычных методов экземпляра (instance methods) и методов класса (class methods) тем, что они не получают ни экземпляр класса (self
), ни сам класс (cls
) в качестве первого аргумента. Они ведут себя как обычные функции, определенные внутри класса, но логически связаны с классом.
Как использовать @staticmethod
:
self
или cls
в качестве первого аргумента.@staticmethod
.Пример:
class MyClass:
def __init__(self, value):
self.value = value
@staticmethod
def add(x, y):
return x + y
def instance_method(self):
return self.value * 2
Как вызвать статический метод:
Статический метод можно вызвать как через имя класса, так и через экземпляр класса, но рекомендуется вызывать через имя класса, чтобы подчеркнуть его статическую природу. Вызов статического метода не требует создания экземпляра класса.
# Вызов через класс
result = MyClass.add(5, 3)
print(result) # Output: 8
# Вызов через экземпляр (не рекомендуется, но допустимо)
instance = MyClass(10)
result = instance.add(5, 3)
print(result) # Output: 8
print(instance.instance_method()) # Output: 20 (обычный метод экземпляра)
Когда использовать @staticmethod
:
В отличие от методов экземпляра:
Методы экземпляра (обычные методы) автоматически получают доступ к экземпляру класса через аргумент self
, что позволяет им изменять состояние экземпляра и вызывать другие методы экземпляра.
class Example:
def __init__(self, value):
self.value = value
def increment(self, amount):
self.value += amount # Изменение состояния экземпляра
return self.value
obj = Example(5)
print(obj.increment(3)) # Output: 8