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