Οι στατικές μέθοδοι μπορούν να κληθούν απευθείας μέσω του ονόματος της κλάσης χωρίς να χρειάζεται να δημιουργηθεί μια παρουσία της κλάσης. Αυτή η ιδιότητα της Python staticmethod διευκολύνει τον σαφή διαχωρισμό της λογικής της κλάσης από τα δεδομένα της παρουσίας.

Σε τι χρησιμοποιείται το Python staticmethod;

Το Python staticmethod είναι τόσο μια συνάρτηση όσο και ένας διακοσμητής. Χρησιμοποιείται για να ορίσει μεθόδους που λειτουργούν ανεξάρτητα από τις περιπτώσεις κλάσης. Οι διακοσμητές στο Python είναι συναρτήσεις που τροποποιούν τη συμπεριφορά άλλων μεθόδων προσθέτοντας συμπληρωματική λειτουργικότητα πριν ή μετά την εκτέλεσή τους, χωρίς να αλλάζουν τον αρχικό κώδικα της συνάρτησης. Σε αντίθεση με τις μεθόδους περίπτωσης, οι στατικές συναρτήσεις δεν απαιτούν μια σιωπηρή παράμετρο όπως self.

Η χρήση του staticmethod στην Python προσφέρει μια εστιασμένη προσέγγιση στη δομή των συναρτήσεων εντός των κλάσεων που δεν απαιτούν πρόσβαση σε δεδομένα παρουσίας. Δεδομένου ότι δεν είναι συνδεδεμένες με μια παρουσία, δεν μπορούν να τροποποιήσουν την κατάσταση ενός αντικειμένου. Εντός των κλάσεων, χρησιμεύουν ως πολύτιμα εργαλεία για την εκτέλεση κοινών εργασιών ή την παροχή καθολικής λειτουργικότητας. Για παράδειγμα, μπορούν να φιλοξενήσουν προγράμματα χρησιμότητας, ρουτίνες μετατροπής και γενικές βοηθητικές συναρτήσεις που μπορούν να κληθούν χωρίς δεδομένα παρουσίας.

Ποια είναι η σύνταξη της Python staticmethod;

Υπάρχουν δύο τρόποι για να δημιουργήσετε στατικές μεθόδους στην Python. Μπορείτε να χρησιμοποιήσετε τη συνάρτηση staticmethod() ή τον διακοσμητή @staticmethod.

staticmethod()

staticmethod() είναι μια ενσωματωμένη συνάρτηση Python που καθιστά μια μέθοδο μιας κλάσης στατική. Η τιμή επιστροφής του Python staticmethod() είναι μια στατική μέθοδος για τη συνάρτηση που μεταβιβάζεται ως όρισμα. Η σύνταξη είναι:

class Class:
    def staticmethodFunc(x,y):
        return x + y
Class.staticmethodFunc = staticmethod(Class.staticmethodFunc)
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
python

Περνώντας τη συνάρτηση staticmethodFunc() που ορίζεται στην κλάση Class ως όρισμα στο staticmethod(), μπορούμε τώρα να καλέσουμε την προσαρμοσμένη μέθοδο απευθείας μέσω του ονόματος της κλάσης.

@staticmethod

Ο διακοσμητής @staticmethod είναι μια συντομότερη και πιο συνηθισμένη μέθοδος για να επισημάνετε μια συνάρτηση ως στατική. Ο διακοσμητής τοποθετείται πάνω από τη μέθοδο στον ορισμό της κλάσης. Η σύνταξη είναι:

class Class:
    @staticmethod
    def staticmethodFunc(x, y):
        return x + y
print('Sum = ', Class.staticmethodFunc(5,7)) # Output: Sum = 12
python

Ο διακοσμητής @staticmethod σηματοδοτεί στον διερμηνέα ότι η καθορισμένη συνάρτηση πρέπει να αντιμετωπίζεται ως στατική μέθοδος.

Παραδείγματα κώδικα Python staticmethod

Μπορείτε να χρησιμοποιήσετε στατικές μεθόδους για διάφορες εργασίες. Ακολουθούν μερικά πρακτικά παραδείγματα για τον τρόπο χρήσης των στατικών μεθόδων.

Μετατροπή μονάδων

Το Python staticmethod είναι πολύ χρήσιμο για τη μετατροπή μονάδων.

class Converter:
    @staticmethod
    def hoursToMinutes(hours):
        return hours * 60
    @staticmethod
    def minutesToHours(minutes):
        return minutes / 60
hours = 3
converted_minutes = Converter.hoursToMinutes(hours)
print(f"{hours} hours are {converted_minutes} minutes.") # Output: 3 hours are 180 minutes.
minutes = 180
converted_hours = Converter.minutesToHours(minutes)
print(f"{minutes} minutes are {converted_hours} hours.") # Output: 180 minutes are 3 hours.
python

Σε αυτό το παράδειγμα, η κλάση Converter έχει δύο στατικές μεθόδους για τη μετατροπή μεταξύ ωρών και λεπτών. Η μέθοδος hoursToMinutes() μετατρέπει τις ώρες σε λεπτά, ενώ minutesToHours() μετατρέπει τα λεπτά σε ώρες.

Μπορούμε να καλέσουμε τις στατικές μεθόδους μέσω του ονόματος της κλάσης χωρίς να χρειάζεται να δημιουργήσουμε μια παρουσία της κλάσης. Η πρόσβαση σε αυτές γίνεται μέσω Converter.hoursToMinutes() ή Converter.minutesToHours(), όπου Converter είναι το όνομα της κλάσης. Εκτυπώνουμε το αποτέλεσμα σε μια f-string, μια μορφή συμβολοσειράς Python που συνδέει εκφράσεις.

Βοηθητικές λειτουργίες για μαθηματικούς υπολογισμούς

Μπορείτε επίσης να χρησιμοποιήσετε τη στατική μέθοδο staticmethod() της Python για να ορίσετε βοηθητικές συναρτήσεις για δευτερεύοντες υπολογισμούς.

class Calculator:
    @staticmethod
    def square(x):
        return x * x
    @staticmethod
    def sqroot(x):
        return x ** 0.5
num = 9
square = Calculator.square(num)
print(f"The square of {num} is {square}.") # Output: The square of 9 is 81.
root = Calculator.sqroot(num)
print(f"The square root of {num} is {root}.") # Output: The square root of 9 is 3.
python

Το παράδειγμα κώδικα παρουσιάζει την κλάση Calculator με στατικές μεθόδους για τον υπολογισμό του τετραγώνου και της τετραγωνικής ρίζας ενός αριθμού. Χρησιμοποιούμε τον διακοσμητή @staticmethod για να επισημάνουμε τις μεθόδους square() και sqroot() ως στατικές. Χωρίς να δημιουργήσουμε μια παρουσία της κλάσης, καλούμε τις μεθόδους μέσω του ονόματος της κλάσης. Συνδέουμε τα αποτελέσματα των Calculator.square() και Calculator.sqroot() σε μια συμβολοσειρά f.

Επικύρωση συμμετοχών

Μια άλλη χρήση της στατικής μεθόδου της Python είναι η επικύρωση των εισροών.

class Validator:
    @staticmethod
    def isInteger(num):
        try:
            int(num)
            return True
        except ValueError:
            return False
    @staticmethod
    def isDecimal(num):
        try:
            float(num)
            return True
        except ValueError:
            return False
input = "123"
is_integer = Validator.isInteger(input)
print(f"Is '{input}' an integer? {is_integer}") # Output: Is '123' an integer? True
input = "3.14"
is_dec = Validator.isDecimal(input)
print(f"Is '{input}' a decimal number? {is_dec}") # Output: Is '3.14' a decimal number? True
python

Η κλάση Validator περιλαμβάνει τις δύο στατικές μεθόδους: isInteger() και isDecimal(). Αυτές οι συναρτήσεις ελέγχουν αν μια δεδομένη είσοδος είναι ακέραιος ή δεκαδικός αριθμός. Η στατική μέθοδος Python isInteger() λαμβάνει μια είσοδο και προσπαθεί να την μετατρέψει σε ακέραιο (int(num)). Αν η μετατροπή είναι επιτυχής, επιστρέφεται True. Διαφορετικά, λαμβάνουμε False αν εντοπιστεί μια εξαίρεση ValueError, η οποία συμβαίνει όταν η επικύρωση δεν είναι δυνατή.

Χρησιμοποιούμε τη μέθοδο isDecimal() για να μετατρέψουμε την είσοδο σε δεκαδικό αριθμό (float(num)). Εάν η μετατροπή είναι επιτυχής, επιστρέφεται True, διαφορετικά επιστρέφεται False. Στη συνέχεια, χρησιμοποιούμε τις στατικές μεθόδους isInteger() και isDecimal() της κλάσης Validator για να ελέγξουμε τις εισόδους "123" και "3.14". Τα αποτελέσματα είναι αληθή και για τις δύο συναρτήσεις.

Χειρισμός συμβολοσειρών

Στο παρακάτω παράδειγμα, ορίζουμε την κλάση StringManipulation με τη στατική μέθοδο reverseText(). Αυτή λαμβάνει ένα κείμενο ως παράμετρο και χρησιμοποιεί τη σύνταξη τεμαχισμού [::-1] για να αντιστρέψει το κείμενο "Hello World!" και να επιστρέψει το αποτέλεσμα.

class StringManipulation:
    @staticmethod
    def reverseText(text):
        return text[::-1]
input_text = "Hello World!"
result = StringManipulation.reverseText(input_text)
print(f"Reversed text of '{input_text}': {result}") # Output: Reversed text of 'Hello World!': !dlroW olleH
python
Go to Main Menu