Sobes.tech
Junior — Middle
23

Чем отличаются classmethod и staticmethod в Python?

Ответ от нейросети

sobes.tech 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 — просто функция внутри класса, не зависящая от класса или экземпляра.