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 :

problème pour une classe dérivée d'une liste [Python 3.X]


Sujet :

Python

  1. #1
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut problème pour une classe dérivée d'une liste
    Bonjour,
    je débute avec les classes en Python 3.4.3 et j'ai le problème suivant dans une version présentée simplifiée :
    Code : 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
    import copy #parce que j'ai de grosses listes emboitées
    class classe1(list):
    	def __init__(self):
    		self=[1,2,3]
    	def affiche(self):
    		print(self)
    class classe2(classe1):
    	def __init__(self,l):
    		self=copy.deepcopy(l)
    c1=classe1()
    print(c1.__dict__)
    c11=classe1()
    print(id(c1),id(c11))
    c1.affiche()
    c2=classe2(c1)
    print(c2)
    #sortie -----------------------------------------------------------------------
    {}
    140208512834760 140208512834840
    []
    []
    Tout se passe comme si mon objet c1 avait était vidé et
    même en surchargeant __del__ j'ai le même problème !

    Merci d'avance de vos réponses,

    Marco

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Salut,

    Citation Envoyé par marco_linux Voir le message
    je débute avec les classes en python
    Dans quel tuto avez vous trouvé des constructions comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    class classe1(list):
    	def __init__(self):
    		self=[1,2,3]
    çà ne peut pas fonctionner.
    Changez de tuto (ou ouvrez en un) car c'est suffisamment compliqué pour prendre le temps de comprendre ce qui doit être fait dans ce cas (et pourquoi).

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

  3. #3
    Membre à l'essai
    Homme Profil pro
    Enseignant
    Inscrit en
    Juillet 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2013
    Messages : 4
    Par défaut
    Bonjour,

    à vrai dire dans aucun réellement car je débute (depuis 3jours).
    En fait je voulais conserver les méthodes de listes pour la classe1 et hériter de toutes les méthodes de la classe1 dans la classe2.
    A l'origine j'ai plutôt quelque chose qui a un squelette de la forme:
    Code : 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
     
    import copy
    class classe1(list):
    	def creation(self,listedeliste):
    		self=liste2liste
                    return(self)
    C=classe1()
    C.creation(liste2liste)
    print(C)
    #jusque la tout va bien
    class classe2(classe1):
    	def __init__(self,l):
    		self=copy.deepcopy(l)
    NC=classe2(C)		
    #le self existe bien dans le __init__
    print(NC) #retourne [] : ses valeurs ont été détruites

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 743
    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 743
    Par défaut
    Citation Envoyé par marco_linux Voir le message
    à vrai dire dans aucun réellement car je débute (depuis 3jours).
    Ça se voit... et c'est pour que les débutants deviennent un peu moins débutants qu'ont été écrit les tutos.

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

  5. #5
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    Lorsqu'on utilise les classes, en général, c'est pour se rapprocher des paradigmes de la POO (Encapsulation, Héritage et Polymorphisme). L'étude de la POO permet de se donner une organisation précise en créant des objets au plus proches de sa problématique.

    Quand vous nommez classe1, que vous souhaitez hériter d'un objet list, je ne vois guère de cohérence, car classe1 devrait être une liste.
    Pour le coup, vous souhaitez récupérer les méthodes de l'objet list, cependant quelles sont les méthodes que vous rajoutez permettant d'augmenter le nombre de fonctionnalités? Je n'en vois aucune!

    Que souhaitez vous faire? L'héritage n'est que très rarement une bonne idée, souvent préféré la composition (est composé de tel ou tel objets).
    Il faudra avant d'attaquer les classes, réfléchir sur les entités (noms, actions sur celles-ci, ...). Ça ne semble pas le cas, je me trompe?

    En expliquant votre problématique, on pourra sans doute vous aider à choisir le design pattern le plus adapté. En l'occurrence, avoir une liste de listes, c'est bien, mais que représente réellement cet objet python dans votre problème?

    Pour conclure, lorsque vous arrivez, avec un code qui n'a pas de cohérence syntaxique et dont vous avez une absence totale de sémantique, il est impossible pour quiconque de savoir ce que vous souhaitez faire réellement. Exprimez mieux le problème, sans code!

  6. #6
    Membre émérite
    Homme Profil pro
    Ingénieur R&D en apprentissage statistique
    Inscrit en
    Juin 2009
    Messages
    447
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur R&D en apprentissage statistique

    Informations forums :
    Inscription : Juin 2009
    Messages : 447
    Par défaut
    Pour dire autrement ce que veux dire wiztricks, ce n'est pas comme ça qu'on fait de l'héritage en python. Tu devrais trouver ça dans n'importe qu'elle intro à Python. A ta décharge la documentation officielle (je viens de regarder) est particulièrement non informative.

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

Discussions similaires

  1. Problème pour utiliser la méthode d'une classe
    Par Freddrick dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 09/09/2012, 18h43
  2. Réponses: 7
    Dernier message: 05/04/2011, 17h19
  3. Réponses: 6
    Dernier message: 12/01/2011, 12h15
  4. construire automatiquement les classes dérivée a une class mere
    Par elekis dans le forum Général Python
    Réponses: 17
    Dernier message: 09/06/2009, 20h53
  5. destructeur d'une classe dérivée du type list
    Par Haze. dans le forum Général Python
    Réponses: 2
    Dernier message: 19/11/2007, 01h11

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