Junior — Middle
Kāda ir atšķirība starp statiskajiem un klases metodēm Python?
sobes.tech AI
Atbilde no AI
Pythonā metodes, kas deklarētas kā @staticmethod un @classmethod, atšķiras pēc pieejas veida pie klases un objekta datiem:
-
@staticmethod — ir metode, kas automātiski neņem atsauci ne uz instanci (
self), ne uz klasi (cls). Tā uzvedas kā parasta funkcija, bet atrodas klases iekšpusē loģiskai grupēšanai. Tā nevar mainīt klases vai instances stāvokli. -
@classmethod — ir metode, kas kā pirmo argumentu saņem pašu klasi (
cls), nevis instanci. Tā ļauj strādāt ar klases atribūtiem, radīt alternatīvus konstruktorus un mainīt klases stāvokli.
Piemērs:
class MyClass:
count = 0
@staticmethod
def greet():
print("Sveiki!")
@classmethod
def increment_count(cls):
cls.count += 1
MyClass.greet() # Izvadīs: Sveiki!
MyClass.increment_count()
print(MyClass.count) # Izvadīs: 1
Tādējādi, staticmethod ir vienkārša funkcija klasē, bet classmethod — metode, kas darbojas ar pašu klasi.