Junior — Middle
Kuo skiriasi naudoti metodus, paskelbtus kaip static ir class Python?
sobes.tech AI
Atsakymas iš AI
Python'e, metodai, deklaruoti kaip @staticmethod ir @classmethod, skiriasi tuo, kaip jie prieina prie klasės ir objekto duomenų:
-
@staticmethod — tai metodas, kuris automatiškai negauna nuorodos nei į objektą (
self), nei į klasę (cls). Jis elgiasi kaip įprasta funkcija, bet yra klasės viduje loginiam grupavimui. Jis negali keisti klasės ar objekto būsenos. -
@classmethod — tai metodas, kuris kaip pirmą argumentą gauna pačią klasę (
cls), o ne objektą. Leidžia dirbti su klasės atributais, kurti alternatyvius konstruktorius ir keisti klasės būseną.
Pavyzdys:
class MyClass:
count = 0
@staticmethod
def greet():
print("Labas!")
@classmethod
def increment_count(cls):
cls.count += 1
MyClass.greet() # Išves: Labas!
MyClass.increment_count()
print(MyClass.count) # Išves: 1
Taigi, staticmethod yra paprasta funkcija klasės viduje, o classmethod — metodas, dirbantis su pačia klase.