Sobes.tech
Junior — Middle

Каква е разликата между използването на методи, обявени като static и class в Python?

sobes.tech AI

Отговор от AI

В Python методите, обявени като @staticmethod и @classmethod, се различават по начина, по който достъпват данните на класа и на обекта:

  • @staticmethod — това е метод, който автоматично не получава препратка към обекта (self) или към класа (cls). Той се държи като обикновена функция, но е разположен вътре в класа за логическо групиране. Не може да променя състоянието на класа или на обекта.

  • @classmethod — това е метод, който получава като първи аргумент самия клас (cls), а не обект. Позволява работа с атрибутите на класа, създаване на алтернативни конструктори и промяна на състоянието на класа.

Пример:

class MyClass:
    count = 0

    @staticmethod
    def greet():
        print("Здравей!")

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.greet()          # Ще изведе: Здравей!
MyClass.increment_count()
print(MyClass.count)     # Ще изведе: 1

Следователно, staticmethod е просто функция вътре в класа, а classmethod — метод, работещ с класа.