Partage
  • Partager sur Facebook
  • Partager sur Twitter

Python class Point3D

appel du constructeur

    4 mars 2011 à 12:03:56

    Bonjour,
    j'ai un problème avec ce programme en Python, il ne calcule pas le milieu du point
    voilà le code:
    class Point3D:
    def __init__(self, x=0, y=0, z=0):
    self.x = x
    self.y = y
    self.z = z

    def milieu(self, p):
    dx= (self.x - p.x)/2
    dy = (self.y - p.y)/2
    dz = (self.z - p.z)/2
    return Point3D(dx,dy,dz)

    #main
    p1=Point3D(1,2,3)
    p2=Point3D(2,3,4)
    p3=p1.milieu(p2)

    il m'affiche: Point3D instance has no attribute 'milieu'
    d'après le code je peux remarquer que le problème réside dans l'appel du constructeur dans la fonction milieu mais je ne sais pas comment le corriger
    merci de me répondre
    • Partager sur Facebook
    • Partager sur Twitter
    Anonyme
      4 mars 2011 à 12:16:50

      t'as déjà une classe ancien style, met une new style

      class Point3D(object):
      
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        4 mars 2011 à 12:51:52

        Heu... ça ne serait pas l'inverse fred ? Je crois bien que le new style c'est sans indiquer l'héritage. Enfin je me trompe peut-être...

        Sinon, chez moi, en indentant le code correctement, je n'ai aucun erreur.
        • Partager sur Facebook
        • Partager sur Twitter
          4 mars 2011 à 12:53:02

          bon j'ai trouvé une autre solution pour éviter l'appel du constructeur dans la fonction
          def milieu(self,p):
          dx=(self.x-p.x)/2
          dy=(self.y-p.y)/2
          dz=(self.z-p.z)/2
          return dx, dy, dz
          #main
          triple=p1.milieu(p2)
          p=Point3D(tri[0],tri[1],tri[2])
          elle ça marche bien :)
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            4 mars 2011 à 19:35:40

            Citation

            Heu... ça ne serait pas l'inverse fred ? Je crois bien que le new style c'est sans indiquer l'héritage. Enfin je me trompe peut-être...



            Oui tu te trompes

            Edit : J'avais pas le temps aujourd'hui de te répondre avant, voila ce que je ferais

            class Point3D(object):
                def __init__(self, x=0, y=0, z=0):
                    self.x = x
                    self.y = y
                    self.z = z
            
                def get(self):
                    return self.x, self.y, self.z
            
                def milieu(self):
                    return Point3D(self.x/2.,self.y/2.,self.z/2.)
            
            #main
            p1=Point3D(1,2,3)
            p2=Point3D(2,3,4)
            p3=p1.milieu()
            
            print p1.get(), p2.get(), p3.get()
            
            • Partager sur Facebook
            • Partager sur Twitter
            Anonyme
              4 mars 2011 à 19:53:58

              Anéfé ^^

              Je me suis trompé. Il faut dire qu'avec Python 3 ces histoire de new-classe et classic-classe ne sont plus d'actualitées puisque toutes les classes héritent par defaut de object.

              Merci de m'avoir corrigé. ;)
              • Partager sur Facebook
              • Partager sur Twitter

              Python class Point3D

              × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
              × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
              • Editeur
              • Markdown