[python] super (), héritage, __init__, etc.

introduction

Ceci est juste une note du contrôle de fonctionnement. Référencé ici

environnement

python 3.6.9

Pensez en plusieurs classes

--Fly variable dans la classe Bird

Exemple d'échec (1) Les variables de classe ne sont pas héritées

class Bird:
    def __init__(self):
        self.fly = 'i can flying'
        print(self.__class__.__name__ + 'Créer une classe')
        
class Fish:
    def __init__(self):
        self.swim = 'i can swimming'
        print(self.__class__.__name__ + 'Créer une classe')
        
class Penguin(Class1, Class2):
    def __init__(self):
        print(self.__class__.__name__ + 'Créer une classe')       
        
        
penguin = Penguin()
penguin.fly


#Résultat d'exécution
AttributeError: 'Penguin' object has no attribute 'fly'

Exemple d'échec (2) Échec de la succession

Les variables de classe Fish sont écrasées par les fonctions de classe Bird __init__


class Bird():
    def __init__(self):
        self.fly = 'i can flying'
        print(self.__class__.__name__)
        
class Fish():
    def __init__(self):
        self.swim = 'i can swimming'
        print(self.__class__.__name__)
        
class Penguin(Bird, Fish):
    def __init__(self):
        super().__init__()
        print(self.__class__.__name__)
        
        
penguin = Penguin()
penguin.fly
penguin.swim


#Résultat d'exécution
AttributeError: 'Penguin' object has no attribute 'swim'

Succès

Il peut être hérité sans être écrasé en héritant explicitement de la fonction __init __ 'avec la fonction super () dans la fonction __init __` de chaque classe.

class Bird(object):
    def __init__(self):
        super(Bird, self).__init__()
        self.fly = 'i can flying'
        print('Dans la classe Bird')
        
class Fish(object):
    def __init__(self):
        super(Fish, self).__init__()
        self.swim = 'i can swimming'
        print('Dans la classe Fish')
        
class Penguin(Bird, Fish):
    def __init__(self):
        super(Penguin,self).__init__()
        print('Dans la classe Fish')
        
        
penguin = Penguin()
print(penguin.fly)
print(penguin.swim)

Pensez avec Pokemon

Configuration de base

Initialiser avec les arguments par défaut

--Définissez les valeurs initiales de Pichu, Pikachu, Raichu

class Pokemon():
    def __init__(self, life=0, power=0):
        self.life = life 
        self.power = power 
        print('Dans la classe Pokémon')
        print(self.__class__.__name__ + 'classe')
        print('life: {} power: {}'.format( self.life, self.power))
        print('\n↓\n')
        
class Pichu(Pokemon):
    def __init__(self, life=50, power=100):
        super().__init__(life, power)
        print('Dans la classe Pichu')
        print(self.__class__.__name__ + 'classe')
        print('life: {} power: {}'.format( self.life, self.power))
        print('\n↓\n')
    def kamituku(self):
        print('Mordant')
        
class Pikachu(Pichu):
    def __init__(self, life=150, power=200):
        super().__init__(life, power)
        print('En classe Pikachu')
        print(self.__class__.__name__ + 'classe')
        print('life: {} power: {}'.format( self.life, self.power))
        print('\n↓\n')
    def denkishokku(self):
        print('Choc électrique')
        
class Raichu(Pikachu):
    def __init__(self, life=200, power=250):
        super().__init__(life, power)
        print('En classe Raichu')
        print(self.__class__.__name__ + 'classe')
        print('life: {} power: {}'.format( self.life, self.power))
        print('\n')
    def kaminari(self):
        print('Tonnerre')
    def set(self, life, power):
        self.life = life
        self.power = power
        
print('---------------------------')
print('◯ instance pokemon ◯')
print('---------------------------')
pokemon = Pokemon()

print('---------------------------')
print('◯ instance de pichu ◯')
print('---------------------------')
pichu = Pichu()

print('---------------------------')
print('◯ instance de pikachu ◯')
print('---------------------------')
pikachu = Pikachu()

print('---------------------------')
print('◯ instance de raichu ◯')
print('---------------------------')
raichu = Raichu()
raichu.kamituku()
raichu.denkishokku()
raichu.kaminari()

Résultat d'exécution


---------------------------
◯ instance pokemon ◯
---------------------------
Dans la classe Pokémon
Classe Pokémon
life: 0 power: 0

↓

---------------------------
◯ instance de pichu ◯
---------------------------
Dans la classe Pokémon
Classe Pichu
life: 50 power: 100

↓

Dans la classe Pichu
Classe Pichu
life: 50 power: 100

↓

---------------------------
◯ instance de pikachu ◯
---------------------------
Dans la classe Pokémon
Classe Pikachu
life: 150 power: 200

↓

Dans la classe Pichu
Classe Pikachu
life: 150 power: 200

↓

En classe Pikachu
Classe Pikachu
life: 150 power: 200

↓

---------------------------
◯ instance de raichu ◯
---------------------------
Dans la classe Pokémon
Classe Raichu
life: 200 power: 250

↓

Dans la classe Pichu
Classe Raichu
life: 200 power: 250

↓

En classe Pikachu
Classe Raichu
life: 200 power: 250

↓

En classe Raichu
Classe Raichu
life: 200 power: 250


Mordant
Choc électrique
Tonnerre

Pensez aux humains

Configuration de base

--Human a des variables de membre yaruki --Tarou hérite de l'humain --La valeur initiale du yaruki de Tarou est de 100 --Réglez le yaruki de tarou à 50

Partie ①

--Human a des variables d'initialisation --Héritage de tarou des variables d'initialisation

class Human:
    def __init__(self, yaruki):
         self.yaruki = yaruki
            
class Tarou(Human):
    def __init__(self,yaruki):
        super().__init__(yaruki)
    def set(self, yaruki):
        self.yaruki = yaruki
        
tarou = Tarou(100)
tarou.set(50) 
print(tarou.yaruki)

#Résultat d'exécution
50

Partie 2

class Human:
    def __init__(self):
         self.yaruki
            
class Tarou(Human):
    def __init__(self):
        self.yaruki = 100
    def set(self, yaruki):
        self.yaruki = yaruki
        
        
tarou = Tarou()
tarou.set(50) 
tarou.yaruki

#Résultat d'exécution
50

Recommended Posts

[python] super (), héritage, __init__, etc.
[Python] Héritage de classe (super)
Python #inheritance (héritage)
À propos de l'héritage Python
Méthodes pratiques de Python, etc.
[Python] Débogage super utile
[Python] Héritage de classe, remplacement
mémorandum python super basique
python super débutant essaie de gratter
Messages Twitter dans Python 3 etc.
Python #function 2 pour les super débutants
Python #function 1 pour les super débutants
#List Python pour les super débutants
Héritage de classe et super fonction
[Hikari-Python] Chapitre 09-03 Classe (Héritage)
Exemples tels que les getters et les setters Python
Python #index pour les super débutants, tranches
Fonction Python #len pour les super débutants
[Python] Raison du remplacement à l'aide de super ()
Python #Hello World pour les super débutants
Python pour les super débutants Super débutants Python # dictionnaire type 2