Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Perintah Penyelesaian Kaedah (MRO) Python memastikan pewarisan kaedah yang tidak jelas dalam kelas gaya baharu?
Perintah Resolusi Kaedah (MRO) dalam Kelas Gaya Baharu
Dalam konteks pengaturcaraan berasaskan kelas Python, Method Resolution Order (MRO ) mentakrifkan urutan di mana kaedah carian dilakukan pada kejadian kelas. Pelaksanaan MRO berbeza antara kelas gaya lama dan gaya baharu.
Warisan Kelas Gaya Lama
Dalam kelas gaya lama, MRO mengikut kedalaman- pendekatan pertama. Apabila mencari kaedah dalam contoh subkelas, penterjemah merentasi hierarki warisan subkelas, mendalam-dahulukan. Kejadian pertama kaedah dalam kelas asas dikembalikan.
Warisan Kelas Gaya Baharu
Dengan pengenalan kelas gaya baharu, semantik MRO ditukar kepada C3 linearisasi. Pendekatan ini menghapuskan kekaburan yang timbul dengan kejadian berbilang kelas asas yang sama dalam hierarki warisan. MRO untuk kelas gaya baharu dikira seperti berikut:
Contoh dengan Berbilang Warisan
Pertimbangkan contoh berikut yang melibatkan berbilang warisan dalam kelas gaya baharu:
<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 instance = Derived() instance.amethod() print(Derived.__mro__) </code>
Dalam contoh ini, walaupun Base1 berlaku beberapa kali dalam warisan hierarki, MRO untuk Derived ialah:
(<class '__main__.Derived'>, <class '__main__.Base2'>, <class '__main__.Base1'>, <class '__main__.Base3'>, <type 'object'>)
Tertib ini sepadan dengan algoritma linearisasi C3 yang diterangkan di atas. Memandangkan Derived ialah kelas daun, ia diletakkan pertama dalam MRO. Kemudian, kelas asasnya ditambah: Base2 (subkelas Base1) dan Base3, dalam susunan itu. Akhir sekali, objek ditambah sebagai kelas asas muktamad.
Kesimpulan
MRO untuk kelas gaya baharu menyediakan kaedah yang pasti dan tidak jelas untuk menyelesaikan pewarisan kaedah. Ia menghapuskan potensi kekaburan yang mungkin timbul daripada kejadian berbilang kelas asas yang sama, seperti yang berlaku dengan warisan kelas gaya lama.
Atas ialah kandungan terperinci Bagaimanakah Perintah Penyelesaian Kaedah (MRO) Python memastikan pewarisan kaedah yang tidak jelas dalam kelas gaya baharu?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!