Junior — Middle
105
Quelles sont les différences d'utilisation et de comportement des méthodes déclarées avec les décorateurs @staticmethod et @classmethod?
Entreprises à qui on a demandé
Бергман Инфотех
ООО Ок Софт
Réponse de l'IA
sobes.tech IA
Методы с декоратором @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'>