Menjelaskan MRO dalam Kelas Gaya Baharu
Tidak seperti lama kelas gaya, kelas gaya baharu mengintrospeksi kelas asas mereka untuk mewujudkan Perintah Resolusi Kaedah (MRO). Tertib ini menentukan urutan kaedah dicari apabila kaedah dipanggil pada objek.
Menyelesaikan Konflik Warisan dengan MRO
Perbezaan utama antara MRO dalam baharu- kelas gaya dan gaya lama timbul apabila kelas nenek moyang yang sama muncul beberapa kali dalam hierarki warisan. Sebagai contoh, pertimbangkan kes pewarisan berlian berikut:
<code class="python">class Base1(object): def amethod(self): print("Base1") class Base2(Base1): pass class Base3(object): def amethod(self): print("Base3") class Derived(Base2, Base3): pass</code>
MRO Gaya Warisan:
Dalam kelas gaya warisan, susunan resolusi ialah D - B - A - C - A. Di sini, apabila menggunakan D.amethod(), definisi dalam A ditemui dahulu dan mengatasi definisi dalam C.
MRO Gaya Baharu:
Untuk kelas gaya baharu, MRO adalah seperti berikut:
<code class="python">D.__mro__ (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)</code>
Perhatikan bahawa A muncul sekali sahaja dalam susunan ini, selepas semua subkelasnya. Ini memastikan bahawa penggantian dalam subkelas, seperti penggantian kaedah C, diutamakan.
Memahami Kepentingan MRO
MRO dalam kelas gaya baharu menyelesaikan konflik pewarisan dengan wajar, membenarkan penggantian berfungsi dengan betul. Ia juga mengelakkan situasi di mana pelbagai takrifan kaedah yang sama muncul dalam susunan resolusi, yang membawa kepada tingkah laku samar-samar. Dengan memahami dan menggunakan MRO dengan berkesan, pembangun boleh mereka bentuk hierarki warisan yang teguh dan boleh diselenggara dalam Python.
Atas ialah kandungan terperinci Bagaimanakah Perintah Penyelesaian Kaedah (MRO) dalam Kelas Gaya Baharu berbeza daripada Kelas Gaya Legasi dan menyelesaikan konflik warisan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!