Προχωρημένο Μάθημα Ανάπτυξης σε Python
Κεφάλαιο
>
Επίπεδο
Μαθηματικές Ενότητες
Ενδοσκόπηση Κώδικα
Στόχος
Επιθεωρήστε κάποια παλιά αντικείμενα που έχουν κρυφτεί στη σοφίτα χρησιμοποιώντας introspection κώδικα για να ανακαλύψετε τι είναι και πώς χρησιμοποιούνται.
Η σοφίτα διαθέτει ένα γραφείο που χρησιμοποιείται σπάνια και υπάρχουν μερικά παλιά σεντούκια που περιέχουν πολύτιμα αντικείμενα που έχουν ξεχαστεί εδώ και καιρό. Εκτός αν αναφέρεται διαφορετικά ή αν ένα σημείωμα παρέχει τις πληροφορίες, μερικές φορές μπορεί να είναι αρκετά δύσκολο να ταυτοποιήσετε αντικείμενα ή σταθερές που συλλέγονται στο πεδίο. Επιπροσθέτως, μπορεί να είναι δύσκολο να προσδιορίσετε το εύρος των ενεργειών που μπορείτε να επιτελέσετε με ένα συγκεκριμένο αντικείμενο ή ποια είναι τα χαρακτηριστικά του. Για να το αντιμετωπίσουμε αυτό, μπορούμε να χρησιμοποιήσουμε το Code Introspection.
Το Code Introspection μας επιτρέπει να επιθεωρούμε και να αναγνωρίζουμε ορισμένα αποσπάσματα κώδικα και να υποδεικνύουμε κάποια από τα χαρακτηριστικά του. Για το σκοπό αυτό, θα χρησιμοποιήσουμε τέσσερις (4) ενσωματωμένες συναρτήσεις introspection που παρέχονται με τον βασικό κώδικα Python: type(), id(), repr(), dir() και help(). Λειτουργούν ως εξής:
type(): Η συνάρτηση ενημερώνει για το είδος του αντικειμένου του ορίσματος που παρέχετε. Για παράδειγμα, αν βάζετε μια μεταβλητή ως όρισμα, η συνάρτηση θα αναγνωρίσει το αντικείμενο ως μεταβλητή.id(): Κάθε αντικείμενο που δημιουργείται ποτέ στην Python έχει ένα μοναδικό id που το αναγνωρίζει μέσα στον κώδικα. Θέτοντας ένα αντικείμενο ως όρισμα αυτής της συνάρτησης, θα επιστρέψει το μοναδικό id του αντικειμένου.repr(): Μετατρέπει μια τιμή που δεν είναι συμβολοσειρά σε συμβολοσειρά, χρήσιμο για τη μετατροπή δεδομένων σε αναγνώσιμη μορφή.dir(): Εμφανίζει όλα τα χαρακτηριστικά που διαθέτει το αντικείμενο, χρήσιμο για να γνωρίζετε τι μπορείτε να επιτύχετε με έναν συγκεκριμένο τύπο αντικειμένου.help(): Εμφανίζει όλες τις πληροφορίες για ένα δεδομένο αντικείμενο, συνάρτηση, κλάση, κ.λπ., που είναι διαθέσιμες στο μητρώο της Python.
Επιπλέον, έχουμε μια νέα ασύγχρονη συνάρτηση που ονομάζεται display(). Αυτή η συνάρτηση είναι παρόμοια με τη συνάρτηση read() αλλά σας επιτρέπει να εμφανίζετε δυναμικά δεδομένα, παρόμοια με τις συναρτήσεις introspection που παράγουν δυναμικά δεδομένα. Η σύνταξή της είναι ως εξής: await player.dysplay( -data-). Όλες αυτές οι συναρτήσεις θα είναι χρήσιμες για την ανάλυση δεδομένων, κάτι που είναι χρήσιμο όταν χρησιμοποιούμε μεθόδους και αρχίζουμε να εισάγουμε νέες συναρτήσεις, καθώς και για την ανάλυση οποιουδήποτε κώδικα από τον οποίο θέλουμε να εντοπίσουμε χαρακτηριστικά.
Θα χρησιμοποιήσουμε αυτές τις συναρτήσεις για να αναγνωρίσουμε και να κατατάξουμε τα αντικείμενα που αποθηκεύονται στη σοφίτα. Για να ξεκινήσετε, περπατήστε μέχρι τα σκούρα σημάδια X πάνω από τα έγχρωμα χαλιά, ξεκινώντας με αυτό πάνω από το κόκκινο χαλί. Υπάρχουν τρεις (3) σταθερές σε αυτή την περιοχή: red_container, green_container και blue_container, οι οποίες αντιπροσωπεύουν τα δοχεία σε κάθε σεντούκι που αντιστοιχεί σε κάθε έγχρωμο χαλί.
Για κάθε σημάδι X, στραφείτε προς το σεντούκι και χρησιμοποιήστε τη συνάρτηση open() για να ανοίξετε τα σεντούκια, χρησιμοποιήστε τη συνάρτηση collect() με τη σταθερά του αντίστοιχου έγχρωμου χαλιού για να την πάρετε από το σεντούκι. Χρησιμοποιήστε τη συνάρτηση introspection type() για να αναγνωρίσετε ποιος τύπος σταθεράς υπάρχει στο σεντούκι. Η έξοδος που παράγει είναι ακατέργαστα δεδομένα και γι' αυτό χρησιμοποιούμε τη συνάρτηση repr() για να τα μετατρέψουμε σε συμβολοσειρά. Χρησιμοποιήστε τη συνάρτηση speak() για να εμφανίσετε τη συνδυασμένη συμβολοσειρά από τη συνάρτηση και τη σταθερά, για παράδειγμα: player.speak(repr(type(red_container))). Συνεχίστε με τη συνάρτηση speak() με τη σταθερά για να αναγνωρίσετε απευθείας τα περιεχόμενα, για παράδειγμα: player.speak(red_container).
Μόλις όλες οι τρεις (3) σταθερές έχουν συλλεχθεί, αναλυθεί και αναγνωριστεί, περπατήστε μέχρι το ανοιχτό σημάδι X μπροστά από το γραφείο. Δημιουργήστε τρεις μεταβλητές που ονομάζονται: item_id_red, item_id_green, item_id_blue. Αυτές θα χρησιμοποιηθούν για να αποθηκεύσουν τους αριθμούς ταυτότητας για κάθε μία από τις συλλεγμένες σταθερές. Χρησιμοποιήστε τη συνάρτηση introspection id() για να πάρετε τον μοναδικό αριθμό ταυτότητας της σταθεράς προσθέτοντάς την ως όρισμα. Ταυτοποιήστε το όνομα της μεταβλητής με το όνομα της σταθεράς χρησιμοποιώντας αυτό το format ως παράδειγμα: item_id_red = id(red_container). Κάντε το ίδιο για και τις τρεις (3) μεταβλητές και σταθερές.
Μόλις και οι τρεις (3) μεταβλητές έχουν γεμίσει, αποθηκεύστε τις σε μια λίστα με το όνομα item_list και στο ανοιχτό σημάδι X χρησιμοποιήστε τη συνάρτηση display() για να διασφαλίσετε ότι έχει καταγραφεί στο σημείωμα πάνω στο τραπέζι, ως εξής: await player.display(item_list).
Τώρα που η λίστα έχει καταγραφεί, περπατήστε μέχρι το σκούρο σημάδι X πάνω από το μωβ χαλί και στραφείτε προς το γραφείο. Εδώ θα χρησιμοποιήσουμε τη συνάρτηση dir() για να προσδιορίσουμε ποια χαρακτηριστικά διαθέτει η λίστα, ωστόσο η έξοδος είναι ακατέργαστα δεδομένα και μπορεί να είναι δύσκολο να τα εμφανίσουμε. Για αυτό χρησιμοποιούμε τη συνάρτηση repr() για να μετατρέψουμε τα δεδομένα σε μια αναγνώσιμη συμβολοσειρά. Δημιουργήστε μια μεταβλητή με το όνομα item_attributes και αποθηκεύστε την παραγόμενη συμβολοσειρά, ως εξής: item_attributes = repr(dir(item_list)). Τέλος, χρησιμοποιήστε τη συνάρτηση display() για να διασφαλίσετε ότι έχει καταγραφεί στο σημείωμα πάνω στο τραπέζι.
Περπατήστε μέχρι το σκούρο σημάδι X πάνω από το λευκό χαλί για να κάνετε το ίδιο όπως κάνατε με το dir(), αλλά με το help(). Αυτό θα περιγράψει όλη τη διαθέσιμη τεκμηρίωση για το αντικείμενο. Δημιουργήστε μια μεταβλητή με το όνομα item_help και αποθηκεύστε την παραγόμενη συμβολοσειρά, ως εξής: item_help = repr(help(item_list)). Τέλος, χρησιμοποιήστε τη συνάρτηση read() για να διασφαλίσετε ότι έχει καταγραφεί επίσης στο σημείωμα πάνω στο τραπέζι, προκειμένου να ολοκληρωθεί το επίπεδο.