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 :

Erreur dans la classe population


Sujet :

Python

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut Erreur dans la classe population
    bonjour
    s'il vous plait, j'ai un erreur dans mon code et je peux pas le corriger .
    pouvez vous m'aider.
    En fait,dans le fichier algo_gen.py ,je crée une classe population mais lorsque je crée une instance de cette classe je ne peux pas accéder à l'un de ces méthodes
    voici mon code
    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
    class population:
     
            def __init__(self,nombre_genes,nombre_initial_population=25):
                    self.nombre_genes=nombre_genes
                    self.individus=[]
                    self.nombre_initial_population=nombre_initial_population
                    for v in range(self.nombre_initial_population):
                            self.individus.append(individu(nombre_genes))
     
    def grade_population(population):
     
                graded_individual = []
                for individu in population:
                    graded_individual.append((individu, get_individual_fitness(individu)))
                return sorted(graded_individual, key=lambda x: x[1], reverse=True)
    dans le programme principal, j'écris ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    	p=algo_gen.population(10,25)
            print p.grade_population(p)
    Mais j'ai l'erreur suivant
    Type error:grade_population() take exactly 1 argument (2 given)

    Merci

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    Citation Envoyé par zeinab ali Voir le message
    En fait,dans le fichier algo_gen.py ,je crée une classe population mais lorsque je crée une instance de cette classe je ne peux pas accéder à l'un de ces méthodes
    Si "grade_population" est méthode de la classe "population" alors sa définition devrait être alignée avec celle de la méthode __init__. Puisque le premier argument d'une méthode est l'instance, pour l'appeler, il suffit d'écrire "print p.grade_population()" (sans passer le "p").

    Et comme ce premier argument, pour les méthodes, est particulier, on s'applique à le désigner par "self"....Ce qui évite de se prendre les pieds dans le tapis.

    Essayez de revoir votre tuto. favori sur les classes en Python, il explique tout çà en détails.
    note: votre code plantera plus loin mais c'est un autre problème.

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

  3. #3
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    Pour rajouter aux observations de Wiztricks, ligne 10, il manque le paramètre (self par convention) toujours dans le cas où grade_population est une méthode de population.
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  4. #4
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Pour rajouter aux observations de Wiztricks, ligne 10, il manque le paramètre (self par convention) toujours dans le cas où grade_population est une méthode de population.
    non, il ne manque pas... il n'est pas désigné correctement. Ce qui n'empêche pas le code de fonctionner même si on ne respecte pas la convention de nommage.

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

  5. #5
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 784
    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 : 3 784
    Points : 7 043
    Points
    7 043
    Par défaut
    non, il ne manque pas... il n'est pas désigné correctement. Ce qui n'empêche pas le code de fonctionner même si on ne respecte pas la convention de nommage.
    Si il manque Mais on ne comprend peut-être pas le code du PO de la même manière, pour moi la construction ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class population:
        def __init__(self):
            pass
     
        def grade_population():
            pass
     
    p = population()
    p.grade_population()
    avec le message d'erreur que le PO reçoit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    fred1599@Fred:~/Bureau$ python3 script.py 
    Traceback (most recent call last):
      File "script.py", line 9, in <module>
        p.grade_population()
    TypeError: grade_population() takes 0 positional arguments but 1 was given
    Alors je ne sais pas si tu vois grade_population comme une fonction indépendante de la classe population, mais dans le cas où ça serait une méthode de la classe, il manque le self déjà indiqué dans la méthode __init__.

    EDIT: je crois comprendre ce que tu as vu, population est mal nommé et devrait être appelé self, c'est ça ?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  6. #6
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    La seule chose qui soit fiable, c'est l'interpréteur Python. S'il dit (comme le PO le rapporte) "Type error:grade_population() take exactly 1 argument (2 given)" alors la construction est plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> class population:
    ...     def grade_population(population):
    ...         pass
    ...
    >>> p = population()
    >>> p.grade_population(p)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: grade_population() takes 1 positional argument but 2 were given
    >>>
    Et pas la peine de passer "p" en argument puisqu'il est déjà passé implicitement.
    note: on pourrait cependant écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> population.grade_population(p)
    mais ce n'est plus de la prose de débutant.

    note: ce qui est sûr c'est que dans le code posté par le PO grade_population n'est pas méthode de la classe "population" mais une simple fonction. Le message d'erreur rapporté n'est pas cohérent.
    Il faut interpréter ce que le PO raconte (j'ai une méthode) et se conforter avec le message d'erreur Python (il aurait été "AttributeError" si "grade_population" était "fonction").

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

  7. #7
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par fred1599 Voir le message
    Si il manque Mais on ne comprend peut-être pas le code du PO de la même manière, pour moi la construction ressemble à ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    class population:
        def __init__(self):
            pass
     
        def grade_population():
            pass
     
    p = population()
    p.grade_population()
    avec le message d'erreur que le PO reçoi

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    fred1599@Fred:~/Bureau$ python3 script.py 
    Traceback (most recent call last):
      File "script.py", line 9, in <module>
        p.grade_population()
     
     
    TypeError: grade_population() takes 0 positional arguments but 1 was given
    Alors je ne sais pas si tu vois grade_population comme une fonction indépendante de la classe population, mais dans le cas où ça serait une méthode de la classe, il manque le self déjà indiqué dans la méthode __init__.

    EDIT: je crois comprendre ce que tu as vu, population est mal nommé et devrait être appelé self, c'est ça ?
    Merci bien fred1599 et wizitriks pour vos réponses
    l'erreur ancien est résolu mais j'ai un nouveau erreur :
    for individu in population:
    typeError: 'classobj ' object is not iterable
    en sachant que individu est un autre classe dans mon code.
    Merci d'avance

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,

    La seule chose qui soit fiable, c'est l'interpréteur Python. S'il dit (comme le PO le rapporte) "Type error:grade_population() take exactly 1 argument (2 given)" alors la construction est plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> class population:
    ...     def grade_population(population):
    ...         pass
    ...
    >>> p = population()
    >>> p.grade_population(p)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: grade_population() takes 1 positional argument but 2 were given
    >>>
    Et pas la peine de passer "p" en argument puisqu'il est déjà passé implicitement.
    note: on pourrait cependant écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    >>> population.grade_population(p)
    mais ce n'est plus de la prose de débutant.

    note: ce qui est sûr c'est que dans le code posté par le PO grade_population n'est pas méthode de la classe "population" mais une simple fonction. Le message d'erreur rapporté n'est pas cohérent.
    Il faut interpréter ce que le PO raconte (j'ai une méthode) et se conforter avec le message d'erreur Python (il aurait été "AttributeError" si "grade_population" était "fonction").

    - W
    Merci bien
    mais grade_population est une méthode de la classe population .

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 241
    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 241
    Points : 36 698
    Points
    36 698
    Par défaut
    Salut,

    Citation Envoyé par zeinab ali Voir le message
    l'erreur ancien est résolu mais j'ai un nouveau erreur :
    for individu in population:
    typeError: 'classobj ' object is not iterable
    en sachant que individu est un autre classe dans mon code.
    Relisez la première réponse que j'ai faite. Elle mentionne que c'est truffé d'erreurs et vous recommande de revoir votre tuto. sur les classes. Pas grand monde va coder à votre place et encore moins réfléchir à ce que vous vouliez faire en écrivant des instructions indigestes pour l'interpréteur Python: à vous de prendre le temps d'apprendre...

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

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    110
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 110
    Points : 51
    Points
    51
    Par défaut
    Citation Envoyé par wiztricks Voir le message
    Salut,



    Relisez la première réponse que j'ai faite. Elle mentionne que c'est truffé d'erreurs et vous recommande de revoir votre tuto. sur les classes. Pas grand monde va coder à votre place et encore moins réfléchir à ce que vous vouliez faire en écrivant des instructions indigestes pour l'interpréteur Python: à vous de prendre le temps d'apprendre...

    - W
    ok ,merci pour le conseil

Discussions similaires

  1. erreur dans ma classe SessionFactory
    Par j_esti dans le forum Hibernate
    Réponses: 4
    Dernier message: 21/05/2008, 12h33
  2. [POO] Erreur dans ma classe de galerie
    Par gtraxx dans le forum Langage
    Réponses: 4
    Dernier message: 12/01/2008, 00h25
  3. Erreur dans une classe !
    Par perdos dans le forum C#
    Réponses: 6
    Dernier message: 16/08/2007, 14h03
  4. Gestion des erreurs dans une classe
    Par gregb34 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 26/07/2007, 10h59
  5. [Thread] Erreur dans une classe interne
    Par totof2308 dans le forum Général Java
    Réponses: 5
    Dernier message: 03/06/2004, 09h15

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