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