Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimanakah `super()` Python Menyelesaikan Panggilan Kaedah dalam Pewarisan Berbilang?

Bagaimanakah `super()` Python Menyelesaikan Panggilan Kaedah dalam Pewarisan Berbilang?

Barbara Streisand
Lepaskan: 2024-12-20 17:35:20
asal
897 orang telah melayarinya

How Does Python's `super()` Resolve Method Calls in Multiple Inheritance?

Cara Warisan Berbilang Mempengaruhi Gelagat super() Python

Warisan berbilang dalam Python memperkenalkan kerumitan dalam penyelesaian kaedah. Python menentukan susunan penyelesaian kaedah (MRO) untuk menetapkan kaedah induk mana yang harus digunakan oleh super().

Dalam contoh anda, Third mewarisi kedua-dua Pertama dan Kedua. Apabila super().__init__() dipanggil dalam Third.__init__(), ia merujuk kepada First.__init__() kerana MRO menilai kelas induk dari kiri ke kanan. Pertama disenaraikan sebelum Kedua dalam rantaian warisan.

Python mengutamakan susunan kelas dalam senarai warisan apabila membina MRO. Oleh itu, dalam contoh berikut, MRO ialah [Keempat, Kedua, Ketiga, Pertama, objek]:

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

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

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

class Fourth(Second, Third):
    def __init__(self):
        super(Fourth, self).__init__()
        print("that's it")
Salin selepas log masuk

Dalam senario ini, Keempat akan memanggil Pertama.__init__() dan bukannya Kedua.__init__() kerana First ditemui dahulu dalam MRO.

Namun, jika perintah pewarisan adalah terbalik:

class Third(Second, First):
    def __init__(self):
        print("third")
Salin selepas log masuk

Kemudian, MRO menjadi [Ketiga, Kedua, Pertama, objek], dan Ketiga pada mulanya akan memanggil Second.__init__().

Terutamanya, Python menguatkuasakan MRO yang koheren . Jika terdapat percanggahan dalam rantaian warisan, ia menimbulkan pengecualian untuk mengelakkan tingkah laku yang tidak dijangka.

Atas ialah kandungan terperinci Bagaimanakah `super()` Python Menyelesaikan Panggilan Kaedah dalam Pewarisan Berbilang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan