Ας πάρουμε αριστοκρατικό: πώς να δημιουργήσετε ενότητες και τάξεις με την Python

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

Πες τι?

Ακολουθούν ορισμένα παραδείγματα που θα σας βοηθήσουν να κατανοήσετε - να διαβάσετε. Υπάρχει επίσης ένα διαδραστικό κέλυφος κώδικα, απλώς πατήστε το κουμπί «Εκτέλεση» στο πάνω μέρος του συγκεκριμένου παραθύρου.

Ο απλούστερος τρόπος για να περιγράψετε τάξεις και πώς να τα χρησιμοποιήσετε είναι ο εξής:

Φανταστείτε ότι έχετε μεγάλες δυνάμεις. Δημιουργείτε ένα είδος ("τάξη").

Στη συνέχεια, δημιουργείτε χαρακτηριστικά για αυτό το είδος ("ιδιότητες") - ύψος, βάρος, άκρα, χρώμα, δυνάμεις και ούτω καθεξής.

Στη συνέχεια, δημιουργείτε μια παρουσία αυτού του είδους - Fido the dog, Drogon από το Game of Thrones και ούτω καθεξής. Στη συνέχεια, εργάζεστε με αυτές τις περιπτώσεις:

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

Μπορείτε ήδη να δείτε γιατί είναι χρήσιμο. Δημιουργείτε, επαναχρησιμοποιείτε, προσαρμόζετε και βελτιώνετε αντικείμενα με πολύ αποτελεσματικό, λογικό και χρήσιμο τρόπο.

Μέχρι τώρα, πιθανότατα έχετε συνειδητοποιήσει ότι αυτός είναι ένας τρόπος ταξινόμησης και ομαδοποίησης, που μοιάζει με τον τρόπο με τον οποίο μαθαίνουν οι άνθρωποι:

  • Τα ζώα είναι ζωντανά πράγματα που δεν είναι ανθρώπινα ή δέντρα, με βασική έννοια
  • τότε προχωράτε σε διαφορετικούς τύπους ζώων - σκύλοι, γάτες είναι πιθανώς τα πρώτα ζώα που μάθαμε οι περισσότεροι από εμάς
  • μετά μετακινείτε σε διαφορετικά χαρακτηριστικά ζώων - σχήματα, μεγέθη, ήχους, προσαρτήματα και ούτω καθεξής.

Για παράδειγμα, όταν ήσασταν παιδί, η πρώτη σας κατανόηση ενός σκύλου ήταν πιθανώς κάτι με τέσσερα πόδια που γαβγίζουν. Τότε μάθατε να διακρίνετε ότι μερικά ήταν αληθινά σκυλιά, άλλα ήταν παιχνίδια. Ότι αυτή η έννοια «σκύλος» περιείχε πολλούς τύπους.

Η δημιουργία και η χρήση μαθημάτων είναι βασικά:

  • δημιουργώντας ένα πρότυπο για να βάλετε "πράγματα" - μια ταξινόμηση
  • το οποίο μπορεί στη συνέχεια να λειτουργήσει. Για παράδειγμα, συγκεντρώνοντας όλα τα άτομα με σκύλους που θα μπορούσατε να ζητήσετε να συνδεθείτε σε ένα ιστολόγιο για κατοικίδια ή σε όλους τους τραπεζικούς πελάτες που θα μπορούσαν να είναι καλές προοπτικές για μια νέα πιστωτική κάρτα.

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

Καθώς ο κόσμος μας γίνεται πιο περίπλοκος, αυτός είναι ένας τρόπος να μιμηθούμε αυτήν την πολυπλοκότητα από μια ιεραρχική άποψη. Χτίζει επίσης μια βαθύτερη κατανόηση των διαδικασιών και των αλληλεπιδράσεων για επιχειρηματικές, τεχνικές και κοινωνικές ρυθμίσεις από ένα εικονικό σημείο τεχνολογίας πληροφοριών.

Ένα παράδειγμα μπορεί να είναι ένα βιντεοπαιχνίδι που δημιουργείτε. Κάθε χαρακτήρας θα μπορούσε να είναι «τάξη», με τα δικά του χαρακτηριστικά, που αλληλεπιδρά με περιπτώσεις άλλων τάξεων. Ο Βασιλιάς Γιώργος της κατηγορίας «Βασιλιάς» μπορεί να αλληλεπιδράσει με τον Court Jester Funnyman της τάξης «Κλόουν» και ούτω καθεξής. Ένας Βασιλιάς μπορεί να έχει μια βασιλική τάξη «υπηρέτη» και μια τάξη «υπηρέτης» θα έχει πάντα μια τάξη «Βασιλιάς», για παράδειγμα.

Αυτό θα κάνουμε:

  • δημιουργήστε μια τάξη και χρησιμοποιήστε την
  • δημιουργήστε μια ενότητα και μετακινήστε τη δημιουργία τάξης και την έναρξη στην ενότητα
  • καλέστε την ενότητα σε ένα νέο πρόγραμμα για να χρησιμοποιήσετε την τάξη

Ο κωδικός είναι διαθέσιμος στο GitHub εδώ.

#TSB - Create Class in Python - rocket positions (x,y) and graph
#some items and comments bolded to call attention to processimport matplotlib.pyplot as plt
class Rocket(): def __init__(self, x=0, y=0): #each rocket has (x,y) position; user or calling function has choice #of passing in x and y values, or by default they are set at 0 self.x = x self.y = y def move_up(self): self.y += 1 def move_down(self): self.y -= 1 def move_right(self): self.x += 1 def move_left(self): self.x -= 1
#Make a series of rockets - x,y positions, I am calling it rocketrockets=[]rockets.append(Rocket())rockets.append(Rocket(0,2))rockets.append(Rocket(1,4))rockets.append(Rocket(2,6))rockets.append(Rocket(3,7))rockets.append(Rocket(5,9))rockets.append(Rocket(8, 15)) #Show on a graph where each rocket is
for index, rocket in enumerate(rockets): #original position of rockets print("Rocket %d is at (%d, %d)." % (index, rocket.x, rocket.y)) plt.plot(rocket.x, rocket.y, 'ro', linewidth=2, linestyle="dashed", markersize=12) #move the 'rocket' one up rocket.move_up() print("New Rocket position %d is at (%d, %d)." % (index, rocket.x, rocket.y)) #plot the new position plt.plot(rocket.x, rocket.y, 'bo', linewidth=2, linestyle="dashed", markersize=12) #move the rocket left, then plot the new position rocket.move_left() plt.plot(rocket.x, rocket.y, 'yo', linewidth=2, linestyle="dashed", markersize=12)
#show graph legend to match colors with positionplt.gca().legend(('original position','^ - Moved up', '< - Moved left'))plt.show()#plt.legend(loc='upper left')

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

Τι είναι μια ενότητα και γιατί τη χρειαζόμαστε;

Ένα module είναι ένα αρχείο που περιέχει ορισμούς και δηλώσεις Python. Η ενότητα είναι κώδικας Python που μπορεί να κληθεί από άλλα προγράμματα για κοινά χρησιμοποιούμενες εργασίες, χωρίς να χρειάζεται να τα πληκτρολογήσετε σε κάθε πρόγραμμα που τα χρησιμοποιεί.

Για παράδειγμα, όταν καλείτε "matplotlib.plot", καλείτε μια ενότητα πακέτων. Εάν δεν είχατε αυτήν την ενότητα θα πρέπει να ορίσετε τη λειτουργικότητα του σχεδίου σε κάθε πρόγραμμα που χρησιμοποίησε ένα γράφημα.

Από την τεκμηρίωση Python:

Εάν κλείσετε από τον διερμηνέα Python και τον εισαγάγετε ξανά, οι ορισμοί που έχετε κάνει (συναρτήσεις και μεταβλητές) θα χαθούν. Επομένως, εάν θέλετε να γράψετε ένα λίγο μεγαλύτερο πρόγραμμα, προτιμάτε να χρησιμοποιήσετε ένα πρόγραμμα επεξεργασίας κειμένου για να προετοιμάσετε την είσοδο για τον διερμηνέα και να το εκτελέσετε με αυτό το αρχείο ως εισαγωγή. Αυτό είναι γνωστό ως δημιουργία σεναρίου Καθώς το πρόγραμμά σας μεγαλώνει, ίσως θελήσετε να το χωρίσετε σε πολλά αρχεία για ευκολότερη συντήρηση. Μπορεί επίσης να θέλετε να χρησιμοποιήσετε μια εύχρηστη λειτουργία που έχετε γράψει σε πολλά προγράμματα χωρίς να αντιγράψετε τον ορισμό της σε κάθε πρόγραμμα. Για να το υποστηρίξει αυτό, η Python έχει έναν τρόπο να τοποθετήσει ορισμούς σε ένα αρχείο και να τους χρησιμοποιήσει σε ένα σενάριο ή σε μια διαδραστική παρουσία του διερμηνέα. Ένα τέτοιο αρχείο ονομάζεται ενότητα.Οι ορισμοί από μια ενότητα μπορούν να εισαχθούν σε άλλες ενότητες ή στην κύρια ενότητα (η συλλογή των μεταβλητών στις οποίες έχετε πρόσβαση σε ένα σενάριο που εκτελείται στο ανώτερο επίπεδο και σε λειτουργία αριθμομηχανής).

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

Παρατηρήστε τι κάναμε παραπάνω:

  • δημιούργησε και αρχικοποίησε την τάξη
  • δημιούργησε μια συνάρτηση για να μετακινήσει μια παρουσία της κλάσης στις τέσσερις κύριες κατευθύνσεις (πάνω, κάτω, δεξιά, αριστερά) και τις προσαυξήσεις - ως παραμέτρους ή επιχειρήματα στη συνάρτηση
  • δημιούργησε μια άλλη συνάρτηση για τον υπολογισμό της απόστασης μεταξύ δύο παρουσιών της κλάσης, χρησιμοποιώντας τον τύπο απόστασης γραφήματος

Δείτε πώς θα χρησιμοποιήσουμε τη νέα ενότητα για να ξαναγράψουμε το ίδιο πρόγραμμα από το πρώτο μέρος. Παρατηρήστε στην ενότητα εισαγωγής στην αρχή, εισάγουμε τώρα τη simple_module1λειτουργική μονάδα που μόλις δημιουργήσαμε:

Here’s the output from the code using our module. Note that they are the same, except for the chart title and the shape of the position markers, which I changed for comparative purposes.

That’s great, you may say — what are some other uses for this? One classic example is a bank account. A customer class might contain the name and contact details and — more importantly — the account class would have deposit and withdrawal elements.

This is grossly oversimplified but, for illustrative purposes, it is useful. That’s it — create a template, then define instances of that template with details (properties), and add value by adding, subtracting, modifying, moving, and using these instances for your program objectives.

Still wondering about classes? Ok, let’s get “classy” — here’s another simple illustration. We will call this class “Person”. It has only two properties — name and age. We will then add an instance of this with a person’s name and age, and print it. Depending on what your objective is, you can imagine all the other details you might add — for example, marital status and location preferences for a social networking app, job experience in years and industry specialization for a career related app. Press the little triangle below to see it work.

So there you have it. You can create many different classes, with parent classes, sub-classes and so on. Thanks for reading — please clap if you liked it. Here are some other references if you would like to learn more:

  • Python documentation — Classes
  • Python Object Oriented — Tutorials Point
  • Μαθήματα και αντικείμενα - learnpython.org