Η ενσωματωμένη συνάρτηση staticmethod () επιστρέφει μια στατική μέθοδο για μια δεδομένη συνάρτηση.
Η σύνταξη του staticmethod()
είναι:
στατική μέθοδος (συνάρτηση)
Η χρήση staticmethod()
θεωρείται μη-Πυθικός τρόπος δημιουργίας στατικής συνάρτησης.
Ως εκ τούτου, σε νεότερες εκδόσεις του Python, μπορείτε να χρησιμοποιήσετε τον @staticmethod
διακοσμητή.
Η σύνταξη του @staticmethod
είναι:
@staticmethod def func (args,…)
staticmethod () Παράμετροι
Η staticmethod()
μέθοδος παίρνει μία μόνο παράμετρο:
- function - function που πρέπει να μετατραπεί σε στατική μέθοδο
Επιστροφή τιμής από τη στατική μέθοδο ()
Οι staticmethod()
αποδόσεις μια στατική μέθοδος για μια συνάρτηση μεταβιβάζεται ως την παράμετρο.
Τι είναι μια στατική μέθοδος;
Οι στατικές μέθοδοι, όπως και οι μέθοδοι τάξης, είναι μέθοδοι που συνδέονται με μια τάξη και όχι με το αντικείμενο.
Δεν απαιτούν δημιουργία παρουσίας τάξης. Έτσι, δεν εξαρτώνται από την κατάσταση του αντικειμένου.
Η διαφορά μεταξύ μιας στατικής μεθόδου και μιας μεθόδου κλάσης είναι:
- Η στατική μέθοδος δεν γνωρίζει τίποτα για την τάξη και απλώς ασχολείται με τις παραμέτρους.
- Η μέθοδος Class λειτουργεί με την κλάση αφού η παράμετρος της είναι πάντα η ίδια η κλάση.
Μπορούν να κληθούν τόσο από την τάξη όσο και από το αντικείμενο της.
Class.staticmethodFunc () ή ακόμη και Class (). StaticmethodFunc ()
Παράδειγμα 1: Δημιουργήστε μια στατική μέθοδο χρησιμοποιώντας τη στατική μέθοδο ()
class Mathematics: def addNumbers(x, y): return x + y # create addNumbers static method Mathematics.addNumbers = staticmethod(Mathematics.addNumbers) print('The sum is:', Mathematics.addNumbers(5, 10))
Παραγωγή
Το άθροισμα είναι: 15
Πότε χρησιμοποιείτε στατικές μεθόδους;
1. Ομαδοποίηση της βοηθητικής λειτουργίας σε μια τάξη
Οι στατικές μέθοδοι έχουν περιορισμένη περίπτωση χρήσης, επειδή, όπως οι μέθοδοι κατηγορίας ή άλλες μέθοδοι μέσα σε μια τάξη, δεν μπορούν να έχουν πρόσβαση στις ιδιότητες της ίδιας της κλάσης.
Ωστόσο, όταν χρειάζεστε μια συνάρτηση χρησιμότητας που δεν έχει πρόσβαση σε ιδιότητες μιας κλάσης αλλά έχει νόημα ότι ανήκει στην τάξη, χρησιμοποιούμε στατικές συναρτήσεις.
Παράδειγμα 2: Δημιουργήστε μια συνάρτηση χρησιμότητας ως στατική μέθοδο
class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") date = Dates("15-12-2016") dateFromDB = "15/12/2016" dateWithDash = Dates.toDashDate(dateFromDB) if(date.getDate() == dateWithDash): print("Equal") else: print("Unequal")
Παραγωγή
Ισος
Εδώ, έχουμε μια Dates
τάξη που λειτουργεί μόνο με ημερομηνίες με παύλες. Ωστόσο, στην προηγούμενη βάση δεδομένων μας, όλες οι ημερομηνίες υπήρχαν σε κάθετο.
Προκειμένου να μετατρέψουμε τις κάθετες ημερομηνίες σε διακεκομμένες ημερομηνίες, έχουμε δημιουργήσει μια συνάρτηση χρησιμότητας toDashDate
εντός Dates
.
Είναι μια στατική μέθοδος επειδή δεν χρειάζεται να αποκτήσει πρόσβαση σε καμία ιδιότητα Dates
και απαιτεί μόνο τις παραμέτρους.
Μπορούμε επίσης να δημιουργήσουμε toDashDate
εκτός της τάξης, αλλά επειδή λειτουργεί μόνο για ημερομηνίες, είναι λογικό να το διατηρούμε μέσα στην Dates
τάξη.
2. Έχοντας μια ενιαία εφαρμογή
Οι στατικές μέθοδοι χρησιμοποιούνται όταν δεν θέλουμε τις υποκατηγορίες μιας αλλαγής τάξης / να παρακάμψουν μια συγκεκριμένη εφαρμογή μιας μεθόδου.
Παράδειγμα 3: Πώς λειτουργεί η κληρονομιά με στατική μέθοδο;
class Dates: def __init__(self, date): self.date = date def getDate(self): return self.date @staticmethod def toDashDate(date): return date.replace("/", "-") class DatesWithSlashes(Dates): def getDate(self): return Dates.toDashDate(self.date) date = Dates("15-12-2016") dateFromDB = DatesWithSlashes("15/12/2016") if(date.getDate() == dateFromDB.getDate()): print("Equal") else: print("Unequal")
Παραγωγή
Ισος
Εδώ, δεν θα θέλαμε η υποκατηγορία DatesWithSlashes
να παρακάμψει τη στατική βοηθητική μέθοδο, toDashDate
επειδή έχει μόνο μία χρήση, δηλαδή αλλαγή ημερομηνίας σε παύλες-ημερομηνίες.
Θα μπορούσαμε εύκολα να χρησιμοποιήσουμε τη στατική μέθοδο προς όφελός μας, παρακάμπτοντας τη getDate()
μέθοδο στην υποκατηγορία, ώστε να λειτουργεί καλά με την DatesWithSlashes
τάξη.