все Python 3ООПпонятие
@staticmethod
методы
Статический метод. Не принимает self или cls. Просто функция внутри класса — логическая группировка.
Синтаксис
@staticmethod
def method(...): ...
В отличие от classmethod статический метод не получает ни экземпляр, ни класс, поэтому до состояния объекта или класса он не дотянется. Держать его в классе, а не выносить обычной функцией, стоит лишь ради логической принадлежности к пространству имён класса; нужен доступ к классу (например, для фабрики) — берите classmethod.
Примеры
class MathUtils:
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
print(MathUtils.add(3, 4)) # → 7
print(MathUtils.multiply(3, 4)) # → 12
class Validator:
@staticmethod
def is_email(s):
return '@' in s and '.' in s.split('@')[-1]
print(Validator.is_email('user@example.com')) # → True
print(Validator.is_email('not-an-email')) # → False
class Temperature:
@staticmethod
def celsius_to_fahrenheit(c):
return c * 9/5 + 32
@staticmethod
def fahrenheit_to_celsius(f):
return (f - 32) * 5/9
print(Temperature.celsius_to_fahrenheit(0)) # → 32.0
# Вызов через экземпляр
v = Validator()
print(v.is_email('a@b.com')) # → True
class StringUtils:
@staticmethod
def is_palindrome(s):
s = s.lower().replace(' ', '')
return s == s[::-1]
print(StringUtils.is_palindrome('racecar')) # → True
print(StringUtils.is_palindrome('hello')) # → False
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности