Συζήτηση
Γεια χαρά, Επισκέπτης
Όνομα χρήστη: Κωδικός: Να με θυμάσαι

ΘΕΜΑ: decorators στη python

decorators στη python 10 Χρόνια 3 Μήνες πριν #2278

  • giotadim
  • Το Άβαταρ του/της giotadim
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 2
Θα μπορούσε κανείς να εξηγήσει τι είναι οι decorators και πως λειτουργούν στη python???
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decorators στη python 10 Χρόνια 3 Μήνες πριν #2281

  • Asotos
  • Το Άβαταρ του/της Asotos
  • Αποσυνδεμένος
  • py____
  • Δημοσιεύσεις: 22
  • Ληφθείσες Ευχαριστίες 9
Αρχικός ορισμός:
Οι decorators είναι συναρτήσεις που δέχονται ως όρισμα (argument) μία συνάρτηση (function) και "επιστρέφουν" μία άλλη συνάρτηση.

Αυτό μπορεί να γίνει στην python γιατί το καθετί (και άρα και οι συναρτήσεις) είναι object, και μπορούμε να περάσουμε οποιοδήποτε object ως όρισμα σε μία συνάρτηση.

Ένα απλό παράδειγμα είναι το εξής:

def decorator(func):
    def wrapper(arg):
        # Πριν κάνει κάτι η συνάρτηση func, τύπωσε κάτι στην οθόνη
        print("Καλώ την συνάρτηση {}...".format(func.__name__))
 
        func(arg)
 
        # Αφού τελειώσει η συνάρτηση, τύπωσε κάτι άλλο
        print("Τέλος συνάρτησης {}.".format(func.__name__))
 
    return wrapper
 

Και τον χρησιμοποιώ ως εξής:

def myFunction(arg):
    pass
 
 
myFunction = decorator(myFunction)

Το παραπάνω η python μας επιτρέπει να το γράψουμε για ευκολία και ως εξής:

@decorator
def myFunction(arg):
    pass
 

Οι παραπάνω 2 τρόποι είναι απολύτως ισοδύναμοι. Ο δεύτερος αποτελεί απλώς syntactic sugar για τον πρώτο.


Μίλησα για συναρτήσεις στην αρχή, αλλά όλα τα παραπάνω μπορούν να εφαρμοστούν και για κλάσεις (classes) και, γενικά, για οποιοδήποτε callable αντικείμενο. Έτσι τελικά ο ορισμός του decorator στην python (χωρίς να είμαι και ειδικός στο θέμα) θα ήταν μάλλον ο εξής:

Οι decorators είναι callables που δέχονται ως όρισμα ένα callable και "επιστρέφουν" ένα άλλο callable.
Τελευταία διόρθωση: 10 Χρόνια 3 Μήνες πριν από Asotos.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decorators στη python 10 Χρόνια 3 Μήνες πριν #2282

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Αυτά που λέει ο Asotos είναι σωστά. Αν τα αγγλικά σου σου το επιτρέπουν θα δεις πολλα blog posts που αναλύουν το θέμα σε βάθος. Αλλιώς, καλύτερα πόσταρε κάποια συγκεκριμένη απορία.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decorators στη python 10 Χρόνια 3 Μήνες πριν #2288

  • giotadim
  • Το Άβαταρ του/της giotadim
  • Αποσυνδεμένος
  • p_____
  • Δημοσιεύσεις: 2
Ευχαριστώ πολύ για τη βοήθεια!!!Βασικά συγκεκριμένα ψάχνω πως λειτουργούν οι decorators always kai instance.Θα εκτιμούσα πολύ να με βοηθούσε κάποιος..!!
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.

decorators στη python 10 Χρόνια 3 Μήνες πριν #2291

  • pmav99
  • Το Άβαταρ του/της pmav99
  • Αποσυνδεμένος
  • Author
  • Δημοσιεύσεις: 684
  • Ληφθείσες Ευχαριστίες 111
Αν θες πόσταρε τον κώδικα και πες τι ακριβώς δεν καταλαβαίνεις.
Πρέπει να είστε εγγεγραμμένο μέλος του Φόρουμ για να κάνετε μια δημοσίευση.
Συντονιστές: pmav99
Χρόνος δημιουργίας σελίδας: 0.421 δευτερόλεπτα

Μοιράσου το!

Powered by CoalaWeb

Λίστα Ταχυδρομείου