В чем разница декораторов @staticmethod и @classmethod с точки зрения принимаемых аргументов
Python
Middle
Без компании
В чем разница декораторов @staticmethod и @classmethod с точки зрения принимаемых аргументов
Ответы
Основное отличие в том, какие аргументы автоматически передаются в метод:
- `@staticmethod` не получает никаких специальных аргументов - это просто функция внутри класса. Работает как обычная функция, но вызывается через класс или экземпляр.
- `@classmethod` первым аргументом получает сам класс (обычно называемый `cls`). Это позволяет обращаться к атрибутам класса и создавать его экземпляры.
Пример:
```
class MyClass:
@staticmethod
def static_method(x):
return x * 2
@classmethod
def class_method(cls, x):
return cls.__name__ + str(x)
# Вызов
MyClass.static_method(5) # 10
MyClass.class_method(5) # 'MyClass5'
```
Ключевые моменты:
- `staticmethod` - чистая функция, не знает о классе
- `classmethod` знает о классе через `cls`
- Оба могут вызываться как через класс, так и через экземпляр