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

GUI Python Discussion :

vpython 2.7 erreur avec définition __init__


Sujet :

GUI Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut vpython 2.7 erreur avec définition __init__
    Bonjour,

    Je suis étudiante en première année bio-ingénieur, et je dois programmer le jeu Lunar Lander.

    Je recois cette erreur

    TypeError: __init__() takes exactly 1 argument (5 given)


    qui est relatée au morceau de code ci-dessous, mais je ne vois pas où est ma faute!
    Quelqu'un à la réponse à ma question?

    class Lander_View(object):
    def __init__(self,owner):
    self.owner = owner
    self.frame = frame ()
    curve(frame, pos=[(-11,17),(-8,17),(-8,15),(-11,15),(-11,17)], radius = 0, color= color.white)
    curve(frame, pos=[(-11,16),(-12,14),(-10,15)], radius =0, color = color.white)
    curve(frame, pos=[(-8,16),(-7,14),(-9,15)], radius =0, color = color.white)
    curve(frame, pos=[(-10,15),(-9.5,12),(-9,15)], radius=0, visible= False)


    Dans mon code, les lignes sont mises à la bonne hauteur, mais ici tout se met à ligne ...

    Merci d'avance

  2. #2
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Bonjour,

    L'erreur est pourtant explicite:
    Citation Envoyé par cecile vb Voir le message
    TypeError: __init__() takes exactly 1 argument (5 given)
    __init__ attend un argument et vous en donnez 5 lors de l'instanciation.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    >>> class Lander_View(object):
    ...     def __init__(self, owner):
    ...         pass
    ... 
    >>> Lander_View(1)
    <__main__.Lander_View object at 0xb76c79cc>
    >>> Lander_View(1, 2)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __init__() takes exactly 2 arguments (3 given)
    Par contre ce n'est pas la classe Lander_View, pour ce qui est du code présenté, qui retourne cette erreur car deux arguments sont attendus: self qui représente l'instance et l'argument owner.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> class Lander_View(object):
    ...     def __init__(self):
    ...         pass
    ... 
    >>> Lander_View(1, 2, 3, 4)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __init__() takes exactly 1 argument (5 given)
    Pour l'indentation sélectionnez le code puis cliquez sur le dièse #.

    @+

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut
    Merci d'avoir réagi si rapidement.

    Si je comprends bien l'erreur, j'aurais donné trop d'arguments à une fonction __init__. Mais quand je controle mon code, je ne vois pas d'endroit où j'ai mis plus que 'owner' en 'self' comme 'argument'

    Si la faute ne vient pas de la partie de code que j'ai donné la dernière fois, il viendra peut -être de la partie suivante?

    class Game_View(object):
    def __init__(self, owner):
    self.owner = owner

    self.frame = frame()
    # maanoppervlak
    curve(frame=f, pos=[(-20,-20),(-17,-17)], radius = 0, color = color.red)
    curve(frame=f, pos=[(-17,-17),(-9,-17)], radius = 0, color= color.green)
    curve(frame=f, pos=[(-9,-17),(-6,-18),(-2,-15),(2,-17)], radius = 0, color = color.red)
    curve(frame=f, pos=[(2,-17),(10,-17)], radius = 0, color = color.green)
    curve(frame=f, pos=[(10,-17),(15,-19),(18,-15),(20,-20)], radius = 0, color = color.red)
    # self.body = f

    side = owner.size
    thk = 0.1
    s2 = 2*side - thk
    s3 = 2*side + thk
    box(pos=( side, 0, 0), length=thk, height=s2, width=0, color = color.blue)
    box(pos=(-side, 0, 0), length=thk, height=s2, width=0, color = color.blue)
    box(pos=(0, -side, 0), length=s3, height=thk, width=0, color = color.blue)
    box(pos=(0, side, 0), length=s3, height=thk, width=0, color = color.blue)
    scene.background = (0,0,0)

    En faite, l'erreur que IDLE donne et plus longue:

    Traceback (most recent call last):
    File "E:\lunar lander\spel_met_nieuwe_code.py", line 142, in <module>
    nieuw_spel = Moon_Lander_Game()
    File "E:\lunar lander\spel_met_nieuwe_code.py", line 14, in __init__
    self.lander = Lander(self)
    File "E:\lunar lander\spel_met_nieuwe_code.py", line 50, in __init__
    self.view = Lander_View(self)
    File "E:\lunar lander\spel_met_nieuwe_code.py", line 90, in __init__
    curve(frame, pos=[(-11,17),(-8,17),(-8,15),(-11,15),(-11,17)], radius = 0, color= color.white)# rechthoek
    TypeError: __init__() takes exactly 1 argument (5 given)mais, je sais difficelement mettre tout mon code dans un message...

    la ligne 90 c'est la 5ième ligne du code dans le mail précédent, c'est pour cela que je pensais que la faute se troivait dans cette partie de code

    Je ne comprends pas trop

    Cécile

  4. #4
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par cecile vb Voir le message
    File "E:\lunar lander\spel_met_nieuwe_code.py", line 90, in __init__
    curve(frame, pos=[(-11,17),(-8,17),(-8,15),(-11,15),(-11,17)], radius = 0, color= color.white)# rechthoek
    Il y a bien 5 arguments (4 + self) lors de l'instanciation de curve.

  5. #5
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Octobre 2008
    Messages
    4 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 4 307
    Par défaut
    Salut,

    Utilises les balises code pour que ton script soit plus lisible. (L'icône #)


    Tu n'as qu'un seul fichier dans ton code ?

    Vu comme tel ça a l'air étrange, ce doit donc être une bêtise, simplement on ne l'a pas sous les yeux.

    Tu peux mettre ton code en entier en attachement si il est trop long.

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2012
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2012
    Messages : 9
    Par défaut
    J'ai mis tout mon code dans un attachement, le travail est en néerlandais (pour info).

    Comment puis-je réduire les 5 arguments à 1 tout en gardant les courbes ?
    Fichiers attachés Fichiers attachés

  7. #7
    Membre Expert Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Par défaut
    Citation Envoyé par cecile vb Voir le message
    Comment puis-je réduire les 5 arguments à 1 tout en gardant les courbes ?
    Aucune idée mais suivant les exemples du site cela ne viens pas de la.
    Ou....
    ?

  8. #8
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 748
    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 748
    Par défaut
    Salut,
    Coder est un exercice de précision:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        self.frame = frame ()
        curve(frame, pos=[(-11,17),(-8,17),(-8,15),(-11,15),(-11,17)], radius = 0, color= color.white)
    Est-ce que curve prend en premier paramètre une classe telle que frame?

    curve est une primitive "simple".

    Avant de l'intégrer dans un programme "compliqué", pourquoi ne pas essayer de faire fonctionner le truc avec des appels simples passé à la console:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> from visual import *
    >>> frame = frame()
    >>> curve(pos=[(-20,-20),(-17,-17)], radius = 0, color = color.red)
    <vis.primitives.curve object at 0x0309B4E0>
    Dans le cas du programme, avec frame en premier paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> curve(frame, pos=[(-20,-20),(-17,-17)], radius = 0, color = color.red)
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    TypeError: __init__() takes exactly 1 argument (5 given)
    >>>
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

Discussions similaires

  1. [W3C] Erreur de validation d'un code avec définition d'id
    Par pierrot10 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 17/02/2007, 07h37
  2. Erreur avec procédure LockWorkStation ...
    Par simonseztech dans le forum API, COM et SDKs
    Réponses: 4
    Dernier message: 16/08/2004, 15h33
  3. [Débutant][Conception] Erreur avec une classe interne
    Par Devil Redneck dans le forum Général Java
    Réponses: 5
    Dernier message: 11/06/2004, 15h45
  4. Erreur avec les ADO
    Par megane dans le forum Bases de données
    Réponses: 7
    Dernier message: 08/03/2004, 21h37
  5. Erreur avec WM_COMMAND (BN_CLICKED)
    Par cyberlewis dans le forum Windows
    Réponses: 2
    Dernier message: 09/02/2004, 00h25

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