Junior — Middle
70
Какие отличия в использовании и поведении у методов, объявленных с декораторами @staticmethod и @classmethod?
Companies where asked
Бергман Инфотех
ООО Ок Софт
Answer from AI
sobes.tech AI
Методы с декоратором @staticmethod не принимают автоматически ни экземпляр класса (self), ни сам класс (cls) в качестве первого аргумента. Они ведут себя как обычные функции, которые логически принадлежат классу, но не зависят от состояния экземпляра или класса. Их можно вызывать как через класс, так и через экземпляр.
Методы с декоратором @classmethod принимают первым аргументом сам класс (обычно называют cls). Это позволяет методу работать с классом, например, создавать новые экземпляры или изменять состояние класса. Такие методы вызываются через класс или экземпляр, но всегда получают класс как первый параметр.
Пример:
class MyClass:
@staticmethod
def static_method():
print("Это статический метод")
@classmethod
def class_method(cls):
print(f"Это метод класса, cls = {cls}")
MyClass.static_method() # Выведет: Это статический метод
MyClass.class_method() # Выведет: Это метод класса, cls = <class '__main__.MyClass'>