Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk melaksanakan pelbagai warisan dalam python

Bagaimana untuk melaksanakan pelbagai warisan dalam python

zbt
Lepaskan: 2023-12-11 14:04:33
asal
1004 orang telah melayarinya

Dalam Python, berbilang warisan boleh dilaksanakan dengan mentakrifkan kelas dengan menggunakan berbilang kelas induk yang dipisahkan dengan koma. Pengenalan terperinci: Apabila kelas mewarisi berbilang kelas induk, ia akan mewarisi sifat dan kaedah semua kelas induk. Ini bermakna subkelas boleh mengakses dan menggunakan sifat dan kaedah yang ditakrifkan dalam kelas induk.

Bagaimana untuk melaksanakan pelbagai warisan dalam python

Sistem pengendalian tutorial ini: sistem Windows 10, versi Python 3.11.4, komputer DELL G3.

Warisan berbilang ialah mekanisme untuk melaksanakan perhubungan antara kelas dalam Python, membenarkan kelas mewarisi sifat dan kaedah daripada berbilang kelas induk. Dalam Python, berbilang warisan boleh dilaksanakan dengan mentakrifkan kelas dengan berbilang kelas induk yang dipisahkan dengan koma. Warisan berbilang boleh meningkatkan kebolehgunaan semula kod dan fleksibiliti pada tahap tertentu, tetapi anda juga perlu memberi perhatian kepada beberapa masalah yang berpotensi, seperti susunan penyelesaian kaedah dan isu pewarisan berlian.

Sintaks asas untuk melaksanakan pelbagai warisan dalam Python adalah seperti berikut:

class Child(Parent1, Parent2, ...):
# 子类的定义
Salin selepas log masuk

Dalam kod di atas, Child ialah nama subkelas, Parent1, Parent2, dsb. ialah nama kelas induk, dan beberapa kelas induk adalah dipisahkan dengan koma.

Seterusnya, saya akan memperkenalkan beberapa aspek pewarisan berbilang secara terperinci:

1 Mewarisi atribut dan kaedah berbilang kelas induk

Apabila kelas mewarisi berbilang kelas induk, ia akan mewarisi sifat semua kelas induk. dan kaedah. Ini bermakna subkelas boleh mengakses dan menggunakan sifat dan kaedah yang ditakrifkan dalam kelas induk.

Sebagai contoh, katakan kita mempunyai dua kelas induk Parent1 dan Parent2, yang masing-masing mentakrifkan beberapa sifat dan kaedah. Kita boleh mencipta subkelas Anak, mewarisi sifat dan kaedah kedua-dua kelas induk ini, seperti ditunjukkan di bawah:

class Parent1:
def method1(self):
print("Parent1 method1")
class Parent2:
def method2(self):
print("Parent2 method2")
class Child(Parent1, Parent2):
pass
Salin selepas log masuk

Dalam kod di atas, kelas `Child` mewarisi dua kelas induk `Parent1` dan `Parent2`. Oleh itu, kelas `Child` boleh memanggil `Parent1` kaedah `method1()` dan kaedah `Parent2`'s `method2()`.

child = Child()
child.method1() # 输出: Parent1 method1
child.method2() # 输出: Parent2 method2
通过创建 `Child` 类的实例 `child`,我们可以调用继承的方法。
Salin selepas log masuk

2. Urutan resolusi kaedah (MRO)

Dalam pelbagai warisan, jika terdapat atribut atau kaedah dengan nama yang sama dalam berbilang kelas induk, Python akan mencari definisi kaedah dalam susunan tertentu. Perintah ini dipanggil perintah resolusi kaedah (Method Perintah Resolusi (MRO).

MRO menentukan susunan carian kaedah dalam kelas berbilang warisan. Dalam versi Python 2.x, susunan MRO dikira melalui carian mendalam-dahulu (DFS) dan pendekatan kiri-dahulu. Dan dalam Python Dalam versi 3.x, algoritma linearisasi C3 digunakan secara lalai untuk mengira MRO.

Anda boleh melihat susunan resolusi kaedah dengan memanggil kaedah mro() kelas. Dalam susunan penyelesaian kaedah, setiap kelas induk kelas disenaraikan di hadapannya, mengekalkan susunan asal.

Sebagai contoh, pertimbangkan contoh berikut:

class Parent1:
def method(self):
print("Parent1 method")
class Parent2:
def method(self):
print("Parent2 method")
class Child(Parent1, Parent2):
pass
print(Child.mro()) # 输出: [, , , ]
Salin selepas log masuk

Dalam contoh di atas, kelas `Child` mewarisi kaedah `kaedah` bagi dua kelas induk `Parent1` dan `Parent2`. Memandangkan `Parent1` sudah masuk `Parent2` di hadapan, jadi apabila memanggil `child.method()`, kaedah dalam kelas `Parent1` sebenarnya dipanggil.

Perhatikan bahawa dalam berbilang warisan, pengiraan MRO adalah berdasarkan susunan warisan kelas. Jika anda menukar susunan kelas induk, keutamaan semasa memanggil sifat atau kaedah dengan nama yang sama juga akan berubah.

3. Masalah pusaka berlian

Pusaka berbilang boleh mendatangkan masalah iaitu Pusaka Berlian Masalah). Masalah pewarisan berlian berlaku apabila subkelas mewarisi daripada dua kelas induk, dan dua kelas induk mewarisi daripada kelas induk yang sama.

Pertimbangkan contoh berikut:

class Grandparent:
def method(self):
print("Grandparent method")
class Parent1(Grandparent):
def method(self):
print("Parent1 method")
class Parent2(Grandparent):
def method(self):
print("Parent2 method")
class Child(Parent1, Parent2):
pass
child = Child()
child.method() # 输出: Parent1 method
Salin selepas log masuk

Dalam contoh di atas, `Grandparent` ialah kelas induk peringkat teratas dan kedua-dua `Parent1` dan `Parent2` mewarisi `Datuk nenek`. Kemudian, kelas `Child` mewarisi `Parent1` dan `Parent2`, dan kedua-dua kelas induk mempunyai kaedah bernama `method` kaedah.

Apabila memanggil `child.method()`, apa yang sebenarnya dipanggil ialah `method` dalam kelas `Parent1` kaedah. Ini kerana dalam pelbagai warisan, Python mencari kaedah dalam susunan kelas induk dan `Parent1` didahulukan sebelum `Parent2`.

Jika anda ingin mengelakkan atau menyelesaikan konflik dalam pewarisan berlian, anda boleh menggunakan fungsi `super()` untuk memanggil kaedah kelas induk tertentu atau mengatasi kaedah untuk menyediakan pelaksanaan tersuai.

Di atas ialah beberapa maklumat asas dan langkah berjaga-jaga tentang pelbagai warisan. Warisan berbilang adalah ciri yang berkuasa, tetapi ia perlu digunakan dengan berhati-hati untuk mengelakkan masalah yang mungkin timbul.

Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pelbagai warisan dalam python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan