Rumah > pembangunan bahagian belakang > Tutorial Python > Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

WBOY
Lepaskan: 2023-04-27 10:13:13
ke hadapan
1925 orang telah melayarinya

Apakah kegunaan super().__ init__ ()?

super().__init__() 、 super(B,self).__init__()
Salin selepas log masuk

1. Fahami super() dan __ init __() masing-masing

1.1, super()

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

rreee
1.2, __init__ ()

__init__() ialah pembina dalam python, yang "dipanggil secara automatik" semasa mencipta objek.

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

需要注意的是python2、3的super写法稍有不同。
Salin selepas log masuk
1.3, super() __ init __()

Jika kedua-dua subkelas B dan kelas induk A mempunyai kaedah init,
Kemudian Kaedah init A akan ditimpa oleh B. Jika anda ingin memanggil kaedah init A, anda perlu menggunakan super untuk memanggilnya.

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

Sudah tentu, di dalam B, selain menggunakan super untuk memanggil kaedah kelas induk, anda juga boleh menggunakan nama kelas induk untuk memanggilnya, contohnya:

定义类时可以不写init方法,系统会默认创建,
你也可以写一个,让你的类在创建时完成一些“动作”。
Salin selepas log masuk
1.3.1 , Soalan tentang "liputan"

Sesetengah orang mungkin salah faham dengan maksud "liputan" dan menganggap "liputan" bermaksud tiada apa-apa sebab ia masih boleh dipanggil melalui hebat?
Ditimpa tidak bermakna kaedah A masih ada, tetapi ia perlu dipanggil dengan super dalam B.

class B(A):
    def __init__(self):
        A.__init__(self)
        print("B init")
Salin selepas log masuk
例:
A里写了一个方法hi(), B继承自A, B里也写了一个方法hi()。
B的对象在外部调用hi(), 就只能调用B里面写的这个hi()。
想通过B调用A的hi(),只能在B内部用super().hi()调用。
Salin selepas log masuk

2. Perbezaan antara super() dalam python2 dan 3

Perbezaan antara Python3.x dan Python2.x: Python 3 boleh menggunakan super().xxx secara langsung dan bukannya super( Kelas, diri).xxx :

Contoh:
python3 boleh ditulis terus sebagai: super().__init__()
python2 mesti ditulis sebagai: super(nama kelas, diri ).__init__( )

Contoh Python3.x:

class A:
    def hi(self):
        print("A hi")

class B(A):
    def hello(self):
        print("B hello")
        
b = B()
b.hi()       # B里没有写hi(),这里调用的是继承自A的hi()

------------------------------------------------------------------
class A:
    def hi(self):
        print("A hi")

class B(A):
    def hi(self):
        print("B hi")
        
b = B()
b.hi()    # 这里调用的就是B自己的hi()
------------------------------------------------------------------
class A:
    def hi(self):
        print("A hi")

class B(A):
    def hi(self):
        super().hi()         # 通过super调用父类A的hi()
        print("B hi")
        
b = B()
b.hi()    # 这里调用的就是B里面的hi()
Salin selepas log masuk

Contoh Python2.x:

class A:
     def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super().add(x)
b = B()
b.add(2)  # 3
Salin selepas log masuk

3 Berkenaan susunan warisan

The lapisan bawah: tulis dahulu A kelas induk A

#!/usr/bin/python
# -*- coding: UTF-8 -*-
 
class A(object):   # Python2.x 记得继承 object
    def add(self, x):
         y = x+1
         print(y)
class B(A):
    def add(self, x):
        super(B, self).add(x)
b = B()
b.add(2)  # 3
Salin selepas log masuk

Tahap kedua: Biarkan B, C, D mewarisi daripada A

class A:
    def __init__(self):
        print('A')
Salin selepas log masuk

Tahap ketiga: E, F, G mewarisi

rreee

Sila lihat Urutan pewarisan G

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

Kami mendapati G mewarisi daripada E, dan F adalah selari, dan E tidak akan dimulakan dahulu semasa pemulaan Hanya mulakan F.

4. Bandingkan super (python3) daripada berbilang kejadian

Berikut ialah tiga pewarisan dan panggilan yang berbeza dan fahami tujuan super().__init__() .

4.1. Contoh

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

子类名称 继承内容
Puple 继承所有
Puple_Init 继承,但覆盖了init方法
Puple_Super 继承,但覆盖了init方法,并在init里面添加了super().__init__()
4.2. Hasil larian dan perbandingan

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

4.3. Kod lengkap

Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?

Atas ialah kandungan terperinci Bagaimana untuk menggunakan kaedah __init__() fungsi super() dalam Python?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:yisu.com
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