Sobes.tech
Junior — Middle

Ποια είναι η διαφορά στη χρήση των μεθόδων που δηλώνονται ως static και class στην Python;

sobes.tech AI

Απάντηση από AI

Στην Python, οι μέθοδοι που δηλώνονται ως @staticmethod και @classmethod διαφέρουν στον τρόπο πρόσβασης στα δεδομένα της κλάσης και του στιγμιότυπου:

  • @staticmethod — είναι μια μέθοδος που δεν λαμβάνει αυτόματα μια αναφορά στο στιγμιότυπο (self) ή στην κλάση (cls). Συμπεριφέρεται σαν μια κανονική συνάρτηση, αλλά βρίσκεται μέσα στην κλάση για λογική ομαδοποίηση. Δεν μπορεί να αλλάξει την κατάσταση της κλάσης ή του στιγμιότυπου.

  • @classmethod — είναι μια μέθοδος που λαμβάνει ως πρώτο όρισμα την ίδια την κλάση (cls), αντί για ένα στιγμιότυπο. Επιτρέπει την εργασία με τα χαρακτηριστικά της κλάσης, τη δημιουργία εναλλακτικών κατασκευαστών και την αλλαγή της κατάστασης της κλάσης.

Παράδειγμα:

class MyClass:
    count = 0

    @staticmethod
    def greet():
        print("Γειά!")

    @classmethod
    def increment_count(cls):
        cls.count += 1

MyClass.greet()          # Θα εμφανίσει: Γειά!
MyClass.increment_count()
print(MyClass.count)     # Θα εμφανίσει: 1

Έτσι, το staticmethod είναι απλώς μια συνάρτηση μέσα στην κλάση, και το classmethod είναι μια μέθοδος που δουλεύει με την ίδια την κλάση.