Rumah >pembangunan bahagian belakang >Tutorial Python >Bagaimanakah Fungsi `super()` Python Mengendalikan Perintah Penyelesaian Berbilang Warisan dan Kaedah (MRO)?

Bagaimanakah Fungsi `super()` Python Mengendalikan Perintah Penyelesaian Berbilang Warisan dan Kaedah (MRO)?

Barbara Streisand
Barbara Streisandasal
2024-12-29 19:28:12203semak imbas

How Does Python's `super()` Function Handle Multiple Inheritance and Method Resolution Order (MRO)?

Python's super() dengan Multiple Inheritance

Dalam Python, berbilang warisan melibatkan kelas yang diwarisi daripada berbilang kelas induk. Apabila menggunakan fungsi super() dalam senario sedemikian, ia menjadi penting untuk memahami kelakuannya.

super() dalam Pewarisan Berbilang

super() terutamanya berfungsi dua tujuan :

  1. Untuk mengakses atribut kelas induk serta-merta dan kaedah.
  2. Untuk menyelesaikan konflik kaedah apabila kelas anak mempunyai berbilang kelas induk.

Dalam coretan kod yang diberikan:

class First(object):
    def __init__(self):
        print("first")

class Second(object):
    def __init__(self):
        print("second")

class Third(First, Second):
    def __init__(self):
        super(Third, self).__init__()
        print("that's it")

Apabila objek Ketiga ialah seketika, perkara berikut berlaku:

  • panggilan super(Ketiga, diri).__init__() Pertama.__init__(diri) kerana Pertama ialah kelas pertama dalam MRO (Perintah Penyelesaian Kaedah) kelas Ketiga.
  • Pertama.__init__(diri) mencetak "first."
  • Third.__init__( sendiri) kemudian mencetak "itu sahaja."

Ambiguous MRO

Walau bagaimanapun, apabila rantaian warisan menjadi lebih kompleks, mungkin terdapat kekaburan dalam menentukan MRO. Ini berlaku apabila kelas kanak-kanak mewarisi daripada berbilang kelas yang mewarisi daripada kelas asas yang sama. Python menimbulkan ralat dalam kes sedemikian.

Sebagai contoh, pertimbangkan kod berikut:

class First(object):
    def __init__(self):
        print("first")
        
class Second(First):
    def __init__(self):
        print("second")

class Third(First):
    def __init__(self):
        print("third")

Apabila cuba mencipta kelas yang mewarisi daripada Kedua dan Ketiga, Python menimbulkan TypeError disebabkan kepada MRO yang samar-samar. Susunan kelas induk dalam senarai warisan adalah penting dan harus konsisten merentas pangkalan kod.

Kesimpulan

Fungsi super() Python ialah alat yang berkuasa untuk mengurus pusaka berbilang. Dengan memahami kelakuannya, anda boleh menyelesaikan konflik kaedah dengan berkesan dan mengekalkan hierarki kelas yang jelas.

Atas ialah kandungan terperinci Bagaimanakah Fungsi `super()` Python Mengendalikan Perintah Penyelesaian Berbilang Warisan dan Kaedah (MRO)?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn