IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Héritage de classe en python3.7


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut Héritage de classe en python3.7
    Bonsoir,

    En me documentant sur l'héritage de classe et notamment la gestion de la méthode __init__():

    https://www.adamsmith.haus/python/an...ctor-in-python
    (voir § DIRECTLY CALL THE __init__() METHOD OF A PARENT CLASS TO INVOKE ITS CONSTRUCTOR)


    je ne comprends pas pourquoi ce code ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    class Pere:
        def __init__(self):
            pass
     
    class Enfant(Pere):
        def __init__(self):
            Pere.__init(self)
     
     
    nouveau = Enfant()
    Traceback (most recent call last):
    File "cus/parsers/copas/essaiClasse.py", line 12, in <module>
    nouveau = Enfant()
    File "cus/parsers/copas/essaiClasse.py", line 9, in __init__
    Pere.__init(self)
    AttributeError: type object 'Pere' has no attribute '_Enfant__init'
    Par pitiè, ne me parlez pas de l'opérateur super().__init(self). Je désire commencer doucement et je ne suis pas sur que cela soit disponible en 3.7.


    Cordialement

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 762
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 762
    Par défaut
    Citation Envoyé par Bayard Voir le message
    je ne comprends pas pourquoi ce code ne fonctionne pas:
    Si vous écrivez __init à la place d'__init__, ça ne va pas marcher.
    Et plus généralement, si vous recopiez du code sans comprendre, le minimum est de vous assurer que vous n'avez rien oublié.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre éclairé Avatar de Bayard
    Inscrit en
    Juin 2002
    Messages
    863
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 863
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Si vous écrivez __init à la place d'__init__, ça ne va pas marcher.
    Et plus généralement, si vous recopiez du code sans comprendre, le minimum est de vous assurer que vous n'avez rien oublié.

    - W
    Merci M'sieur !

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 840
    Billets dans le blog
    1
    Par défaut
    Bonsoir
    Citation Envoyé par Bayard Voir le message
    Par pitiè, ne me parlez pas de l'opérateur super().__init(self). Je désire commencer doucement et je ne suis pas sur que cela soit disponible en 3.7.
    Déjà ce n'est pas super().__init__(self) mais super().__init__() ("self" est implicite). Et il est dispo depuis la v2 mais dans cette version précédente il nécessite une syntaxe un peu différente => super(Enfant, self).__init__(). En v3 le nom de la classe et "self" sont facultatifs.

    Et franchement ce n'est pas super compliqué...

    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/env python3
     
    class vehicule:
    	def __init__(self, vitesse, roues):
    		self._vitesse=vitesse
    		self._roues=roues
    	# __init__()
     
    	def affich(self): print("véhicule (%s) - vitesse=%d, roues=%d" % (self, self._vitesse, self._roues))
    # class vehicule
     
    class voiture(vehicule):
    	def __init__(self, motorisation, vitesse, roues):
    		vehicule.__init__(self, vitesse, roues)
    		self.__motorisation=motorisation
    	# __init__()
     
    	def affich(self):
    		vehicule.affich(self)
    		print("voiture (%s) - motorisation=%s, vitesse=%d, roues=%d" % (self, self.__motorisation, self._vitesse, self._roues))
    	# affiche()
    # class voiture
     
    class avion(vehicule):
    	def __init__(self, altitude, vitesse, roues):
    		super().__init__(vitesse, roues)
    		self.__altitude=altitude
    	# __init__()
     
    	def affich(self):
    		super(avion, self).affich()
    		print("avion (%s) - altitude=%d, vitesse=%d, roues=%d" % (self, self.__altitude, self._vitesse, self._roues))
    	# affiche()
    # class avion
     
    v=voiture("diesel", 100, 4)
    v.affich()
    a=avion(25000, 200, 2)
    a.affich()
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. conflit d'inclusions et Héritage de classe
    Par gedeon555 dans le forum C++
    Réponses: 7
    Dernier message: 01/10/2006, 19h48
  2. [POO] Problème héritage des classes PHP4
    Par zana74 dans le forum Langage
    Réponses: 2
    Dernier message: 15/08/2006, 16h00
  3. Héritage de classes.
    Par Berzerk_ dans le forum C++
    Réponses: 48
    Dernier message: 13/08/2006, 23h48
  4. [POO] Héritage vs classe dans une classe
    Par robichou dans le forum Langage
    Réponses: 4
    Dernier message: 06/08/2006, 23h51
  5. [OO] Héritage - Mixins Classes
    Par djmalo dans le forum Langages de programmation
    Réponses: 4
    Dernier message: 01/03/2005, 23h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo