Perintah Resolusi Kaedah (MRO) dalam Kelas Gaya Baharu
Dalam Python, susunan resolusi kaedah (MRO) menentukan susunan pewarisan rantai dicari untuk atribut kaedah. Walaupun MRO untuk kelas gaya lama mengikut pendekatan mendalam-dahulukan yang mudah, kelas gaya baharu memperkenalkan susunan diubah suai yang memastikan berbilang warisan berfungsi dengan lebih intuitif.
Perbezaan MRO dalam Kelas Gaya Baharu
Apabila kelas nenek moyang yang sama muncul berbilang kali dalam pendekatan kedalaman-pertama naif dalam kelas gaya warisan, kelas itu lebih diutamakan daripada subkelasnya. Pertimbangkan contoh "warisan berlian" berikut:
<code class="python">class A: x = 'a' class B(A): pass class C(A): x = 'c' class D(B, C): pass</code>
Dalam gaya legasi, susunan resolusi untuk D.x ialah: D - B - A - C - A. Oleh itu, takrifan A menyembunyikan penggantian dalam C.
Walau bagaimanapun, dalam kelas gaya baharu, MRO yang diubah suai memastikan penggantian diterima. MRO untuk contoh di atas ialah:
<code class="python">D.__mro__ (<class '__main__.D'>, <class '__main__.B'>, <class '__main__.C'>, <class '__main__.A'>, <type 'object'>)</code>
Di sini, A dipaksa untuk muncul sekali sahaja selepas semua subkelasnya. Ini membenarkan penggantian dalam subkelas, seperti penggantian C bagi x, berkuat kuasa.
Implikasi untuk Pewarisan
Perbezaan MRO dalam kelas gaya baharu mempunyai implikasi penting untuk pusaka berbilang. Kelas gaya warisan terdedah kepada konflik dalam corak pewarisan berlian. Sebaliknya, kelas gaya baharu mengendalikan berbilang warisan dengan lebih fleksibel dan membenarkan penggantian berfungsi seperti yang diharapkan.
Oleh itu, adalah disyorkan untuk mengelakkan kelas gaya lama dan sebaliknya menggunakan kelas gaya baharu. Kelas gaya baharu memastikan berbilang warisan berfungsi secara intuitif dan menghalang konflik yang tidak dijangka dalam penyelesaian kaedah.
Atas ialah kandungan terperinci Bagaimanakah Perintah Resolusi Kaedah (MRO) Berbeza dalam Kelas Gaya Baharu Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!