Μαθήματα και αντικείμενα Python (με παραδείγματα)

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

Βίντεο: Μαθήματα και αντικείμενα Python

Αντικείμενα και κλάσεις Python

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

Ένα αντικείμενο είναι απλώς μια συλλογή δεδομένων (μεταβλητών) και μεθόδων (συναρτήσεων) που δρουν σε αυτά τα δεδομένα. Ομοίως, μια κλάση είναι ένα σχεδιάγραμμα για αυτό το αντικείμενο.

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

Δεδομένου ότι πολλά σπίτια μπορούν να κατασκευαστούν από το σχεδιάγραμμα ενός σπιτιού, μπορούμε να δημιουργήσουμε πολλά αντικείμενα από μια τάξη. Ένα αντικείμενο ονομάζεται επίσης παρουσία μιας κλάσης και η διαδικασία δημιουργίας αυτού του αντικειμένου ονομάζεται instantiation .

Ορισμός τάξης στο Python

Όπως οι ορισμοί συνάρτησης ξεκινούν με τη λέξη-κλειδί def στο Python, οι ορισμοί κλάσης ξεκινούν με μια λέξη-κλειδί κατηγορίας.

Η πρώτη συμβολοσειρά μέσα στην τάξη ονομάζεται docstring και έχει μια σύντομη περιγραφή για την τάξη. Αν και δεν είναι υποχρεωτικό, αυτό συνιστάται ιδιαίτερα.

Εδώ είναι ένας απλός ορισμός τάξης.

 class MyNewClass: '''This is a docstring. I have created a new class''' pass

Μια τάξη δημιουργεί ένα νέο τοπικό χώρο ονομάτων όπου ορίζονται όλα τα χαρακτηριστικά της Τα χαρακτηριστικά μπορεί να είναι δεδομένα ή συναρτήσεις.

Υπάρχουν επίσης ειδικά χαρακτηριστικά σε αυτό που ξεκινούν με διπλή υπογράμμιση __. Για παράδειγμα, __doc__μας δίνει το docstring αυτής της κλάσης.

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

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # Output: 10 print(Person.age) # Output: print(Person.greet) # Output: 'This is my second class' print(Person.__doc__)

Παραγωγή

 10 Αυτή είναι μια κατηγορία ατόμων

Δημιουργία αντικειμένου στο Python

Είδαμε ότι το αντικείμενο κλάσης θα μπορούσε να χρησιμοποιηθεί για πρόσβαση σε διαφορετικά χαρακτηριστικά.

Μπορεί επίσης να χρησιμοποιηθεί για τη δημιουργία νέων παρουσιών αντικειμένων (instantiation) αυτής της κλάσης. Η διαδικασία δημιουργίας ενός αντικειμένου είναι παρόμοια με μια κλήση συνάρτησης.

 >>> harry = Person()

Αυτό θα δημιουργήσει μια νέα παρουσία αντικειμένου με το όνομα harry. Μπορούμε να έχουμε πρόσβαση στα χαρακτηριστικά των αντικειμένων χρησιμοποιώντας το πρόθεμα ονόματος αντικειμένου.

Τα χαρακτηριστικά μπορεί να είναι δεδομένα ή μέθοδος. Οι μέθοδοι ενός αντικειμένου είναι αντίστοιχες συναρτήσεις αυτής της κλάσης.

Αυτό σημαίνει ότι, επειδή Person.greetείναι ένα αντικείμενο συνάρτησης (χαρακτηριστικό της κλάσης), Person.greetθα είναι ένα αντικείμενο μεθόδου.

 class Person: "This is a person class" age = 10 def greet(self): print('Hello') # create a new object of Person class harry = Person() # Output: print(Person.greet) # Output:  print(harry.greet) # Calling object's greet() method # Output: Hello harry.greet() 

Παραγωγή

  Χαίρετε 

Μπορεί να έχετε παρατηρήσει την selfπαράμετρο στον ορισμό της συνάρτησης μέσα στην κλάση, αλλά ονομάσαμε τη μέθοδο απλά harry.greet()χωρίς ορίσματα. Δούλεψε ακόμα.

Αυτό συμβαίνει επειδή, όταν ένα αντικείμενο καλεί τη μέθοδο του, το ίδιο το αντικείμενο μεταφέρεται ως το πρώτο όρισμα. Έτσι, harry.greet()μεταφράζεται σε Person.greet(harry).

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

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

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

Κατασκευαστές στην Python

Οι συναρτήσεις τάξης που ξεκινούν με διπλή υπογράμμιση __ονομάζονται ειδικές συναρτήσεις καθώς έχουν ειδική σημασία.

Ένα ιδιαίτερο ενδιαφέρον είναι η __init__()συνάρτηση. Αυτή η ειδική λειτουργία καλείται κάθε φορά που δημιουργείται ένα νέο αντικείμενο αυτής της κλάσης.

This type of function is also called constructors in Object Oriented Programming (OOP). We normally use it to initialize all the variables.

 class ComplexNumber: def __init__(self, r=0, i=0): self.real = r self.imag = i def get_data(self): print(f'(self.real)+(self.imag)j') # Create a new ComplexNumber object num1 = ComplexNumber(2, 3) # Call get_data() method # Output: 2+3j num1.get_data() # Create another ComplexNumber object # and create a new attribute 'attr' num2 = ComplexNumber(5) num2.attr = 10 # Output: (5, 0, 10) print((num2.real, num2.imag, num2.attr)) # but c1 object doesn't have attribute 'attr' # AttributeError: 'ComplexNumber' object has no attribute 'attr' print(num1.attr)

Output

 2+3j (5, 0, 10) Traceback (most recent call last): File "", line 27, in print(num1.attr) AttributeError: 'ComplexNumber' object has no attribute 'attr'

In the above example, we defined a new class to represent complex numbers. It has two functions, __init__() to initialize the variables (defaults to zero) and get_data() to display the number properly.

An interesting thing to note in the above step is that attributes of an object can be created on the fly. We created a new attribute attr for object num2 and read it as well. But this does not create that attribute for object num1.

Deleting Attributes and Objects

Οποιοδήποτε χαρακτηριστικό ενός αντικειμένου μπορεί να διαγραφεί ανά πάσα στιγμή, χρησιμοποιώντας τη delδήλωση. Δοκιμάστε το παρακάτω στο κέλυφος Python για να δείτε την έξοδο.

 >>> num1 = ComplexNumber(2,3) >>> del num1.imag >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'imag' >>> del ComplexNumber.get_data >>> num1.get_data() Traceback (most recent call last):… AttributeError: 'ComplexNumber' object has no attribute 'get_data'

Μπορούμε ακόμη και να διαγράψουμε το ίδιο το αντικείμενο, χρησιμοποιώντας τη δήλωση del.

 >>> c1 = ComplexNumber(1,3) >>> del c1 >>> c1 Traceback (most recent call last):… NameError: name 'c1' is not defined

Στην πραγματικότητα, είναι πιο περίπλοκο από αυτό. Όταν το κάνουμε c1 = ComplexNumber(1,3), δημιουργείται ένα νέο αντικείμενο παρουσίας στη μνήμη και το όνομα c1 συνδέεται με αυτό.

Στην εντολή del c1, αυτή η δέσμευση καταργείται και το όνομα c1 διαγράφεται από τον αντίστοιχο χώρο ονομάτων. Ωστόσο, το αντικείμενο εξακολουθεί να υπάρχει στη μνήμη και αν δεν έχει δεσμευτεί άλλο όνομα, αργότερα καταστρέφεται αυτόματα.

Αυτή η αυτόματη καταστροφή μη αναφερόμενων αντικειμένων στην Python ονομάζεται επίσης συλλογή απορριμμάτων.

Η διαγραφή αντικειμένων στο Python καταργεί τη σύνδεση του ονόματος

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