Στατική μέθοδος Python ()

Η ενσωματωμένη συνάρτηση 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τάξη.

ενδιαφέροντα άρθρα...