Σε αυτό το σεμινάριο, θα μάθετε για την πολλαπλή κληρονομιά στο Python και πώς να το χρησιμοποιήσετε στο πρόγραμμά σας. Θα μάθετε επίσης για την κληρονομιά πολλών επιπέδων και τη σειρά ανάλυσης μεθόδου.
Πολλαπλή κληρονομικότητα Python
Μια τάξη μπορεί να προέρχεται από περισσότερες από μία βασικές κατηγορίες στο Python, παρόμοια με το C ++. Αυτό ονομάζεται πολλαπλή κληρονομιά.
Σε πολλαπλή κληρονομιά, τα χαρακτηριστικά όλων των βασικών τάξεων μεταβιβάζονται στην παράγωγη κλάση. Η σύνταξη για πολλαπλή κληρονομιά είναι παρόμοια με την κληρονομιά μίας.
Παράδειγμα
class Base1: pass class Base2: pass class MultiDerived(Base1, Base2): pass
Εδώ, η κλάση MultiDerived προέρχεται από τις κατηγορίες Base1 και Base2.

Η κλάση MultiDerived κληρονομεί και από τις κατηγορίες Base1 και Base2.
Πολυεπίπεδη κληρονομικότητα Python
Μπορούμε επίσης να κληρονομήσουμε από μια παράγωγη τάξη. Αυτό ονομάζεται πολυεπίπεδη κληρονομιά. Μπορεί να έχει οποιοδήποτε βάθος στην Python.
Στην πολυεπίπεδη κληρονομιά, τα χαρακτηριστικά της βασικής κατηγορίας και της παραγόμενης κατηγορίας κληρονομούνται στη νέα παράγωγη κατηγορία.
Ένα παράδειγμα με αντίστοιχη οπτικοποίηση δίνεται παρακάτω.
class Base: pass class Derived1(Base): pass class Derived2(Derived1): pass
Εδώ, η κλάση Derived1 προέρχεται από την κλάση Base και η κλάση Derived2 προέρχεται από την κλάση Derived1.

Παραγγελία ανάλυσης μεθόδου στο 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.

# 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.