Sobes.tech
Junior — Middle
104

Quali sono le differenze nell'uso e nel comportamento dei metodi dichiarati con i decoratori @staticmethod e @classmethod?

Le aziende dove è stato chiesto
Бергман Инфотех
ООО Ок Софт

Risposta dell'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'>