Comment utiliser la méthode __init__() de la fonction super() en Python ?

WBOY
Libérer: 2023-04-27 10:13:13
avant
1865 Les gens l'ont consulté

super().__ init__() A quoi ça sert ?

super().__init__() 、 super(B,self).__init__()
Copier après la connexion

1. Comprendre super() et __ init __() respectivement

1.1, super()

Comment utiliser la méthode __init__() de la fonction super() en Python ?#🎜 🎜 #

需要注意的是python2、3的super写法稍有不同。
Copier après la connexion

1.2, __init__()
__init__() est un constructeur en python, qui est "automatiquement appelé" lors de la création d'un objet.

Comment utiliser la méthode __init__() de la fonction super() en Python ?

定义类时可以不写init方法,系统会默认创建,
你也可以写一个,让你的类在创建时完成一些“动作”。
Copier après la connexion

1.3, super() __ init __()
Si la sous-classe B et la classe parent A, toutes deux If. la méthode init est écrite

alors la méthode init de A sera écrasée par B. Si vous souhaitez appeler la méthode init de A, vous devez utiliser super pour l'appeler.

Comment utiliser la méthode __init__() de la fonction super() en Python ?

Bien sûr, à l'intérieur de B, en plus d'utiliser super pour appeler la méthode de la classe parent, vous pouvez également l'appeler en utilisant le nom de la classe parent, par exemple exemple :

class B(A):
    def __init__(self):
        A.__init__(self)
        print("B init")
Copier après la connexion

1.3.1. Questions sur la « couverture »
Certaines personnes peuvent mal comprendre le sens de « couverture » et penser que « couverture » ne veut rien dire. toujours être appelé par super ?

Couvert ne veut pas dire qu'il a disparu. La méthode de A sera toujours là après tout, mais elle doit être appelée avec super à l'intérieur de B.

例:
A里写了一个方法hi(), B继承自A, B里也写了一个方法hi()。
B的对象在外部调用hi(), 就只能调用B里面写的这个hi()。
想通过B调用A的hi(),只能在B内部用super().hi()调用。
Copier après la connexion
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()
Copier après la connexion

2. La différence entre super() dans python2 et 3

Une différence entre Python3.x et Python2.x : Python 3 peut utiliser super() directement. remplace super(Class, self).xxx :

Exemple :

python3 directement écrit comme : super().__init__()
python2 doit être écrit comme : super( Nom de cette classe, self).__init__()

Instance Python3.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
Copier après la connexion

Instance Python2.x :

#!/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
Copier après la connexion
# 🎜🎜# 3. Concernant l'ordre d'héritage

Le niveau le plus bas : écrivez d'abord une classe parent A

class A:
    def __init__(self):
        print('A')
Copier après la connexion

Le deuxième niveau : laissez B, C et D hériter de A# 🎜🎜#

class B(A):
    def __init__(self):
        print('B')
        super().__init__()

class C(A):
    def __init__(self):
        print('C')
        super().__init__()

class D(A):
    def __init__(self):
        print('D')
        super().__init__()
Copier après la connexion
#🎜🎜 #Troisième niveau : héritage E, F, G

class E(B, C):
    def __init__(self):
        print('E')
        super().__init__()

class F(C, D):
    def __init__(self):
        print('F')
        super().__init__()

class G(E, F):
    def __init__(self):
        print('G')
        super().__init__()
Copier après la connexion

Regardez l'ordre d'héritage de G

#🎜 🎜#

Comment utiliser la méthode __init__() de la fonction super() en Python ?Nous avons constaté que G hérite de E et que F est parallèle Lors de l'initialisation, E ne sera pas initialisé avant que F ne soit initialisé.

4. Comparez super (python3) à partir de plusieurs instances Comment utiliser la méthode __init__() de la fonction super() en Python ?

Voici trois héritages et appels différents. Comparez leurs différences et déterminez le but de super().__init__ ().

4.1, instance

Comment utiliser la méthode __init__() de la fonction super() en Python ?Nom de la sous-classe

# 🎜🎜#Hériter le contenuHérite, mais remplace la méthode d'initialisation Puple_SuperInherits, mais remplace la méthode d'initialisation, et Super( ).__init__() est ajouté à init 🎜🎜#
Puple Hériter tout
Pup le_Init # 🎜🎜#
4.3, code complet

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal