Встроенные декораторы
1. @staticmethod — статический метод
@staticmethod — статический методЧто делает: превращает метод класса в обычную функцию, которая не получает
selfилиclsавтоматически.Когда применять: метод логически относится к классу, но не зависит от состояния экземпляра или самого класса.
class MathUtils:
@staticmethod
def add(a, b):
return a + b
print(MathUtils.add(2, 3)) # 5💡 В автотестах: удобно для хелперов, например, генераторов тестовых данных.
2. @classmethod — метод класса
@classmethod — метод классаЧто делает: передаёт в метод ссылку на сам класс (
cls) вместо экземпляра.Когда применять: нужно работать с классом в целом (например, альтернативные конструкторы).
class User:
def __init__(self, name):
self.name = name
@classmethod
def from_fullname(cls, fullname):
first, last = fullname.split()
return cls(first)
user = User.from_fullname("John Smith")
print(user.name) # John💡 В автотестах: полезно для фабрик объектов Page Object.
3. @property — превращает метод в атрибут
@property — превращает метод в атрибутЧто делает: позволяет вызывать метод как обычное свойство без скобок.
Когда применять: когда нужно "ленивое" вычисление значения или валидация при установке.
💡 В автотестах: удобно, когда данные должны выглядеть как атрибуты, а не методы.
4. @<property>.setter и @<property>.deleter
@<property>.setter и @<property>.deleterЧто делает: определяет логику при изменении или удалении свойства.
5. @functools.lru_cache (технически из functools, но часто относят к "встроенным")
@functools.lru_cache (технически из functools, но часто относят к "встроенным")Что делает: кеширует результат функции.
Когда применять: если функция часто вызывается с одними и теми же аргументами.
💡 В тестах: удобно при работе с медленными API для повторных запросов.
6. @dataclass (из dataclasses)
@dataclass (из dataclasses)Что делает: автоматически создаёт
__init__,__repr__,__eq__и другие методы для класса с атрибутами.
💡 В тестах: быстро описывать структуры тестовых данных.
7. @abstractmethod (из abc)
@abstractmethod (из abc)Что делает: заставляет наследников обязательно реализовать метод.
💡 В тестах: удобно в архитектуре, где есть общий интерфейс тестов или страниц.
Last updated