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 — метод, работещ с класа.