super().__init__() 、 super(B,self).__init__()
__init__() ialah pembina dalam python, yang "dipanggil secara automatik" semasa mencipta objek.
需要注意的是python2、3的super写法稍有不同。
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.
Sudah tentu, di dalam B, selain menggunakan super untuk memanggil kaedah kelas induk, anda juga boleh menggunakan nama kelas induk untuk memanggilnya, contohnya:
定义类时可以不写init方法,系统会默认创建, 你也可以写一个,让你的类在创建时完成一些“动作”。
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")
例: A里写了一个方法hi(), B继承自A, B里也写了一个方法hi()。 B的对象在外部调用hi(), 就只能调用B里面写的这个hi()。 想通过B调用A的hi(),只能在B内部用super().hi()调用。
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()
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
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
Tahap kedua: Biarkan B, C, D mewarisi daripada A
class A: def __init__(self): print('A')
Tahap ketiga: E, F, G mewarisi
rreeeSila lihat Urutan pewarisan G
Kami mendapati G mewarisi daripada E, dan F adalah selari, dan E tidak akan dimulakan dahulu semasa pemulaan Hanya mulakan F.
Berikut ialah tiga pewarisan dan panggilan yang berbeza dan fahami tujuan super().__init__() .
子类名称 | 继承内容 |
---|---|
Puple | 继承所有 |
Puple_Init | 继承,但覆盖了init方法 |
Puple_Super | 继承,但覆盖了init方法,并在init里面添加了super().__init__() |
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!