Sobes.tech
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.