Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

5.3 Ο πολυμορφισμός (Polymorphism) στην Python

Ο πολυμορφισμός (Polymorphism) είναι ένα σημαντικό χαρακτηριστικό της αντικειμενοστραφούς προγραμματισμού στην Python που επιτρέπει στις κλάσεις να έχουν μεθόδους με το ίδιο όνομα αλλά με διαφορετική υλοποίηση. Αυτό σημαίνει ότι μπορείτε να ορίσετε μια μέθοδο με το ίδιο όνομα σε διάφορες κλάσεις και ο κατάλληλος κώδικας θα εκτελεστεί ανάλογα με τον τύπο του αντικειμένου που καλεί τη μέθοδο.

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

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

Ο πολυμορφισμός στην Python μπορεί να υλοποιηθεί με διάφορους τρόπους, παραδείγματα είναι:

  1. Μέσω της κληρονομικότητας και της υπερκάλυψης μεθόδων (Method Overriding): Μια υποκλάση μπορεί να ορίσει μια μέθοδο με το ίδιο όνομα με μια μέθοδο στην γονική κλάση, αλλά με διαφορετική υλοποίηση. Κατά την κλήση της μεθόδου, η σωστή υλοποίηση θα επιλεγεί ανάλογα με τον τύπο του αντικειμένου.
  2. Χρησιμοποιώντας την πολυμορφία των συναρτήσεων (Duck Typing): Στην Python, η πολυμορφία επιτυγχάνεται μέσω του “Duck Typing”, όπου η σωστή υλοποίηση μιας συνάρτησης εξαρτάται από τον τύπο των αντικειμένων που περνούν σαν παράμετροι. Αν ένα αντικείμενο έχει τις απαραίτητες μεθόδους που χρειάζονται από μια συνάρτηση, τότε μπορεί να χρησιμοποιηθεί με ασφάλεια στο πλαίσιο αυτής της συνάρτησης, ανεξαρτήτως του τύπου του.

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

Παράδειγμα 1: Υπερκάλυψης Μεθόδων (Method Overriding)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
class Animal:
def speak(self):
pass # Κενή μέθοδος που ορίζεται στην κλάση για υποκλάσεις να την υπερκαλύπτουν
class Dog(Animal):
def speak(self):
return "Woof!" # Υπερκάλυψη της μεθόδου speak() για την επιστροφή του ήχου του σκύλου
class Cat(Animal):
def speak(self):
return "Meow!" # Υπερκάλυψη της μεθόδου speak() για την επιστροφή του ήχου της γάτας
# Πολυμορφία μέσω της κληρονομικότητας και της υπερκάλυψης μεθόδων
def make_sound(animal):
print(animal.speak()) # Κλήση της μεθόδου speak() του αντικειμένου animal
dog = Dog() # Δημιουργία αντικειμένου τύπου Dog
cat = Cat() # Δημιουργία αντικειμένου τύπου Cat
make_sound(dog) # Εκτύπωση του ήχου του σκύλου ("Woof!")
make_sound(cat) # Εκτύπωση του ήχου της γάτας ("Meow!")
class Animal: def speak(self): pass # Κενή μέθοδος που ορίζεται στην κλάση για υποκλάσεις να την υπερκαλύπτουν class Dog(Animal): def speak(self): return "Woof!" # Υπερκάλυψη της μεθόδου speak() για την επιστροφή του ήχου του σκύλου class Cat(Animal): def speak(self): return "Meow!" # Υπερκάλυψη της μεθόδου speak() για την επιστροφή του ήχου της γάτας # Πολυμορφία μέσω της κληρονομικότητας και της υπερκάλυψης μεθόδων def make_sound(animal): print(animal.speak()) # Κλήση της μεθόδου speak() του αντικειμένου animal dog = Dog() # Δημιουργία αντικειμένου τύπου Dog cat = Cat() # Δημιουργία αντικειμένου τύπου Cat make_sound(dog) # Εκτύπωση του ήχου του σκύλου ("Woof!") make_sound(cat) # Εκτύπωση του ήχου της γάτας ("Meow!")
class Animal:
    def speak(self):
        pass  # Κενή μέθοδος που ορίζεται στην κλάση για υποκλάσεις να την υπερκαλύπτουν

class Dog(Animal):
    def speak(self):
        return "Woof!"  # Υπερκάλυψη της μεθόδου speak() για την επιστροφή του ήχου του σκύλου

class Cat(Animal):
    def speak(self):
        return "Meow!"  # Υπερκάλυψη της μεθόδου speak() για την επιστροφή του ήχου της γάτας

# Πολυμορφία μέσω της κληρονομικότητας και της υπερκάλυψης μεθόδων
def make_sound(animal):
    print(animal.speak())  # Κλήση της μεθόδου speak() του αντικειμένου animal

dog = Dog()  # Δημιουργία αντικειμένου τύπου Dog
cat = Cat()  # Δημιουργία αντικειμένου τύπου Cat

make_sound(dog)  # Εκτύπωση του ήχου του σκύλου ("Woof!")
make_sound(cat)  # Εκτύπωση του ήχου της γάτας ("Meow!")

Ο παραπάνω κώδικας ορίζει τρεις κλάσεις: Animal, Dog και Cat. Η κλάση Animal είναι η βασική κλάση και περιέχει μια μέθοδο speak() που δεν πραγματοποιεί καμία ενέργεια.

Οι κλάσεις Dog και Cat κληρονομούν από την κλάση Animal και υπερκαλύπτουν τη μέθοδο speak(). Η μέθοδος speak() της κλάσης Dog επιστρέφει τον ήχο “Woof!” ενώ η μέθοδος speak() της κλάσης Cat επιστρέφει τον ήχο “Meow!”.

Η συνάρτηση make_sound(animal) δέχεται ένα αντικείμενο animal και καλεί τη μέθοδο speak() του αντικειμένου για να εκτυπώσει τον αντίστοιχο ήχο.

Στον κύριο κώδικα, δημιουργούνται ένα αντικείμενο τύπου Dog με την εντολή dog = Dog() και ένα αντικείμενο τύπου Cat με την εντολή cat = Cat(). Στη συνέχεια, καλείται η συνάρτηση make_sound() δύο φορές, μία με το αντικείμενο dog και μία με το αντικείμενο cat. Οι κλήσεις εκτυπώνουν τον αντίστοιχο ήχο του σκύλου (“Woof!”) και της γάτας (“Meow!”).

[adinserter block=”2″]

Παράδειγμα 2: Duck Typing (Πολυμορφία Συναρτήσεων)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
class Dog:
def speak(self):
return "Woof!" # Επιστροφή του κειμένου "Woof!" ως ήχος που κάνει ο σκύλος
class Cat:
def speak(self):
return "Meow!" # Επιστροφή του κειμένου "Meow!" ως ήχος που κάνει η γάτα
def make_sound(animal):
print(animal.speak()) # Εκτύπωση του ήχου που παράγει το ζώο
dog = Dog() # Δημιουργία αντικειμένου κλάσης Dog με την μεταβλητή dog
cat = Cat() # Δημιουργία αντικειμένου κλάσης Cat με την μεταβλητή cat
make_sound(dog) # Κλήση της συνάρτησης make_sound με το αντικείμενο dog, εκτυπώνει "Woof!"
make_sound(cat) # Κλήση της συνάρτησης make_sound με το αντικείμενο cat, εκτυπώνει "Meow!"
class Dog: def speak(self): return "Woof!" # Επιστροφή του κειμένου "Woof!" ως ήχος που κάνει ο σκύλος class Cat: def speak(self): return "Meow!" # Επιστροφή του κειμένου "Meow!" ως ήχος που κάνει η γάτα def make_sound(animal): print(animal.speak()) # Εκτύπωση του ήχου που παράγει το ζώο dog = Dog() # Δημιουργία αντικειμένου κλάσης Dog με την μεταβλητή dog cat = Cat() # Δημιουργία αντικειμένου κλάσης Cat με την μεταβλητή cat make_sound(dog) # Κλήση της συνάρτησης make_sound με το αντικείμενο dog, εκτυπώνει "Woof!" make_sound(cat) # Κλήση της συνάρτησης make_sound με το αντικείμενο cat, εκτυπώνει "Meow!"
class Dog:
    def speak(self):
        return "Woof!"  # Επιστροφή του κειμένου "Woof!" ως ήχος που κάνει ο σκύλος

class Cat:
    def speak(self):
        return "Meow!"  # Επιστροφή του κειμένου "Meow!" ως ήχος που κάνει η γάτα

def make_sound(animal):
    print(animal.speak())  # Εκτύπωση του ήχου που παράγει το ζώο

dog = Dog()  # Δημιουργία αντικειμένου κλάσης Dog με την μεταβλητή dog
cat = Cat()  # Δημιουργία αντικειμένου κλάσης Cat με την μεταβλητή cat

make_sound(dog)  # Κλήση της συνάρτησης make_sound με το αντικείμενο dog, εκτυπώνει "Woof!"
make_sound(cat)  # Κλήση της συνάρτησης make_sound με το αντικείμενο cat, εκτυπώνει "Meow!"

Ο παραπάνω κώδικας ορίζει δύο κλάσεις, την κλάση Dog και την κλάση Cat, που έχουν μια μέθοδο με όνομα speak. Η μέθοδος speak επιστρέφει αντίστοιχα το κείμενο “Woof!” για την κλάση Dog και το κείμενο “Meow!” για την κλάση Cat.

Υπάρχει επίσης η συνάρτηση make_sound, η οποία παίρνει ένα αντικείμενο animal ως όρισμα. Αυτή η συνάρτηση καλεί τη μέθοδο speak του αντικειμένου animal και εκτυπώνει τον ήχο που επιστρέφεται.

Στη συνέχεια, δημιουργούνται δύο αντικείμενα, ένα από την κλάση Dog με τη μεταβλητή dog και ένα από την κλάση Cat με τη μεταβλητή cat. Τέλος, η συνάρτηση make_sound καλείται δύο φορές, μία με το αντικείμενο dog και μία με το αντικείμενο cat, και εκτυπώνει τον αντίστοιχο ήχο που κάνει κάθε ζώο. Στην προκειμένη περίπτωση, η έξοδος θα είναι “Woof!” και “Meow!”.

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

Παρακάτω παρατίθενται μερικά παραδείγματα της χρήσης της len() σε διαφορετικά αντικείμενα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Χρήση της len() σε μια συμβολοσειρά
string_example = "Γεια σου, κόσμε!"
print(len(string_example)) # Εμφανίζει 16
# Χρήση της len() σε μια λίστα
list_example = [1, 2, 3, 4, 5]
print(len(list_example)) # Εμφανίζει 5
# Χρήση της len() σε ένα λεξικό
dict_example = {'apple': 1, 'banana': 2, 'orange': 3}
print(len(dict_example)) # Εμφανίζει 3
# Χρήση της len() σε μια συμβολοσειρά string_example = "Γεια σου, κόσμε!" print(len(string_example)) # Εμφανίζει 16 # Χρήση της len() σε μια λίστα list_example = [1, 2, 3, 4, 5] print(len(list_example)) # Εμφανίζει 5 # Χρήση της len() σε ένα λεξικό dict_example = {'apple': 1, 'banana': 2, 'orange': 3} print(len(dict_example)) # Εμφανίζει 3
# Χρήση της len() σε μια συμβολοσειρά
string_example = "Γεια σου, κόσμε!"
print(len(string_example))  # Εμφανίζει 16

# Χρήση της len() σε μια λίστα
list_example = [1, 2, 3, 4, 5]
print(len(list_example))  # Εμφανίζει 5

# Χρήση της len() σε ένα λεξικό
dict_example = {'apple': 1, 'banana': 2, 'orange': 3}
print(len(dict_example))  # Εμφανίζει 3

Ο παραπάνω κώδικας παρουσιάζει τη χρήση της συνάρτησης len() σε διάφορα δεδομένα.

  1. Αρχικά, ορίζεται μια μεταβλητή string_example που περιέχει τη συμβολοσειρά “Γεια σου, κόσμε!”. Στη συνέχεια, χρησιμοποιείται η συνάρτηση len() για να υπολογιστεί το μήκος της συμβολοσειράς και το αποτέλεσμα 16 εκτυπώνεται στην οθόνη.
  2. Στη δεύτερη ενότητα, δημιουργείται μια λίστα με τα στοιχεία [1, 2, 3, 4, 5] και χρησιμοποιείται η συνάρτηση len() για να υπολογιστεί το πλήθος των στοιχείων της λίστας. Το αποτέλεσμα 5 εκτυπώνεται στην οθόνη.
  3. Τέλος, δημιουργείται ένα λεξικό με τα ζευγάρια κλειδιών-τιμών {‘apple’: 1, ‘banana’: 2, ‘orange’: 3} και χρησιμοποιείται η συνάρτηση len() για να υπολογιστεί ο αριθμός των κλειδιών στο λεξικό. Το αποτέλεσμα 3 εκτυπώνεται στην οθόνη.

[adinserter block=”3″]

Για της πλειάδες (tuples), η συνάρτηση len() επιστρέφει τον αριθμό των στοιχείων που περιέχονται στην πλειάδα. Ακολουθεί ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Δημιουργία μιας πλειάδας
tuple_example = ('apple', 'banana', 'orange', 'grape')
# Χρήση της len() για να βρούμε το μήκος της πλειάδας
print(len(tuple_example)) # Εμφανίζει 4, δηλαδή τον αριθμό των στοιχείων στην πλειάδα
# Δημιουργία μιας πλειάδας tuple_example = ('apple', 'banana', 'orange', 'grape') # Χρήση της len() για να βρούμε το μήκος της πλειάδας print(len(tuple_example)) # Εμφανίζει 4, δηλαδή τον αριθμό των στοιχείων στην πλειάδα
# Δημιουργία μιας πλειάδας
tuple_example = ('apple', 'banana', 'orange', 'grape')

# Χρήση της len() για να βρούμε το μήκος της πλειάδας
print(len(tuple_example))  # Εμφανίζει 4, δηλαδή τον αριθμό των στοιχείων στην πλειάδα

Ο κώδικας δημιουργεί μια πλειάδα με τέσσερα στοιχεία: ‘apple’, ‘banana’, ‘orange’ και ‘grape’. Στη συνέχεια, χρησιμοποιεί τη συνάρτηση len() για να υπολογίσει το μήκος της πλειάδας, δηλαδή τον αριθμό των στοιχείων που περιέχει. Το αποτέλεσμα, που είναι ο αριθμός 4, εκτυπώνεται στην οθόνη. Έτσι, ο κώδικας εμφανίζει το μήκος της πλειάδας.

Για τα λεξικά (dictionaries), η συνάρτηση len() επιστρέφει τον αριθμό των ζευγαριών κλειδί/τιμή που περιέχονται στο λεξικό. Ακολουθεί ένα παράδειγμα:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
# Δημιουργία ενός λεξικού
dict_example = {'apple': 1, 'banana': 2, 'orange': 3, 'grape': 4}
# Χρήση της len() για να βρούμε το μήκος του λεξικού
print(len(dict_example)) # Εμφανίζει 4, το μήκος του λεξικού dict_example
# Δημιουργία ενός λεξικού dict_example = {'apple': 1, 'banana': 2, 'orange': 3, 'grape': 4} # Χρήση της len() για να βρούμε το μήκος του λεξικού print(len(dict_example)) # Εμφανίζει 4, το μήκος του λεξικού dict_example
# Δημιουργία ενός λεξικού
dict_example = {'apple': 1, 'banana': 2, 'orange': 3, 'grape': 4}

# Χρήση της len() για να βρούμε το μήκος του λεξικού
print(len(dict_example))  # Εμφανίζει 4, το μήκος του λεξικού dict_example

Ο παραπάνω κώδικας πραγματοποιεί τις ακόλουθες ενέργειες:

  1. Δημιουργεί ένα λεξικό με τη μορφή dict_example, το οποίο περιέχει τέσσερα ζευγάρια κλειδιών-τιμών. Τα κλειδιά είναι οι λέξεις “apple”, “banana”, “orange” και “grape”, ενώ οι τιμές είναι οι αντίστοιχοι ακέραιοι αριθμοί 1, 2, 3 και 4.
  2. Χρησιμοποιεί τη συνάρτηση len() για να υπολογίσει το μήκος του λεξικού dict_example. Η συνάρτηση len() επιστρέφει τον αριθμό των κλειδιών-τιμών που περιέχει το λεξικό.
  3. Εκτυπώνει το μήκος του λεξικού με τη χρήση της εντολής print(). Η τιμή που εμφανίζεται στην οθόνη είναι ο αριθμός 4, καθώς το λεξικό dict_example περιέχει τέσσερα ζευγάρια κλειδιών-τιμών.
7 Ιουνίου, 2023
top
error: Content is protected !!
Μετάβαση σε γραμμή εργαλείων