Sobes.tech
Junior — Middle

Каква е разликата между classmethod и staticmethod в Python?

sobes.tech AI

Отговор от AI

classmethod и staticmethod са два типа методи в Python, които се различават по начина, по който получават достъп до класа и неговите данни.

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

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

Пример:

class MyClass:
    count = 0

    def __init__(self):
        MyClass.count += 1

    @classmethod
    def get_count(cls):
        return cls.count

    @staticmethod
    def greet(name):
        return f"Hello, {name}!"

obj = MyClass()
print(MyClass.get_count())  # Ще изведе броя на създадените обекти
print(MyClass.greet('Alice'))  # Ще изведе поздрав

Обобщение:

  • classmethod може да променя или използва състоянието на класа.
  • staticmethod е просто функция вътре в класа, която не зависи от класа или екземпляр.