Python Multiple Inheritance: Τι είναι και πώς να το χρησιμοποιήσετε;

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

Πολλαπλή κληρονομικότητα Python

Μια τάξη μπορεί να προέρχεται από περισσότερες από μία βασικές κατηγορίες στο Python, παρόμοια με το C ++. Αυτό ονομάζεται πολλαπλή κληρονομιά.

Σε πολλαπλή κληρονομιά, τα χαρακτηριστικά όλων των βασικών τάξεων μεταβιβάζονται στην παράγωγη κλάση. Η σύνταξη για πολλαπλή κληρονομιά είναι παρόμοια με την κληρονομιά μίας.

Παράδειγμα

 class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass

Εδώ, η κλάση MultiDerived προέρχεται από τις κατηγορίες Base1 και Base2.

Πολλαπλή κληρονομικότητα στο Python

Η κλάση MultiDerived κληρονομεί και από τις κατηγορίες Base1 και Base2.

Πολυεπίπεδη κληρονομικότητα Python

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

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

Ένα παράδειγμα με αντίστοιχη οπτικοποίηση δίνεται παρακάτω.

 class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass

Εδώ, η κλάση Derived1 προέρχεται από την κλάση Base και η κλάση Derived2 προέρχεται από την κλάση Derived1.

Πολυεπίπεδη κληρονομικότητα στο Python

Παραγγελία ανάλυσης μεθόδου στο Python

Κάθε τάξη στο Python προέρχεται από την objectτάξη. Είναι ο πιο βασικός τύπος στην Python.

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

 # Output: True print(issubclass(list,object)) # Output: True print(isinstance(5.5,object)) # Output: True print(isinstance("Hello",object))

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

Έτσι, στο παραπάνω παράδειγμα της MultiDerivedκατηγορίας η σειρά αναζήτησης είναι ( MultiDerived, Base1, Base2, object). Αυτή η σειρά ονομάζεται επίσης γραμμικοποίηση της MultiDerivedκλάσης και το σύνολο κανόνων που χρησιμοποιούνται για την εύρεση αυτής της παραγγελίας ονομάζεται μέθοδος ανάλυσης μεθόδου (MRO) .

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

Το MRO μιας κλάσης μπορεί να θεωρηθεί ως __mro__χαρακτηριστικό ή mro()μέθοδο. Η πρώτη επιστρέφει μια πλειάδα ενώ η δεύτερη επιστρέφει μια λίστα.

 >>> MultiDerived.__mro__ (, , , ) >>> MultiDerived.mro() (, , , )

Εδώ είναι ένα λίγο πιο περίπλοκο παράδειγμα πολλαπλής κληρονομιάς και η οπτικοποίησή του μαζί με το MRO.

Οπτικοποίηση πολλαπλών κληρονομιών στο Python
 # Demonstration of MRO class X: pass class Y: pass class Z: pass class A(X, Y): pass class B(Y, Z): pass class M(B, A, Z): pass # Output: # (, , # , , # , , # ) print(M.mro())

Παραγωγή

 (,,,,,,)

Για να μάθετε τον πραγματικό αλγόριθμο για τον τρόπο υπολογισμού του MRO, επισκεφθείτε τη Συζήτηση στο MRO.

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