Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème AttributeError: 'function' object

Sujet résolu
23 mai 2018 à 8:54:31

Bonjour, je commence avec Python et j'ai fait des morceaux de code dans deux fichiers différents pour simplifier les choses. Mais je me retrouve avec une erreur AttributeError: 'function' object has no attribute '_ajoutSegment' et je ne sais pas pourquoi ? Les deux fichiers marche individuellement mais une fois "connecté" il y a ce problème.

import generateurImage

def intersectionZetDroite(mesh2d):
            
            nbPointOk = 0
            # j'ai enlevé un peu de code pour resté focus sur l'endroit ou cela semble foirer
            #print(xPlan)
            #print(yPlan)
            for nbPointTeste in range(3):
                if xPlan[nbPointTeste][1] == True :
                    if yPlan[nbPointTeste][1] == True :
                        numPointValide[nbPointOk] = nbPointTeste
                        fichier3d.pIntersection[nbTriangleIntersecte][nbPointOk] = (xPlan[nbPointTeste][0], yPlan[nbPointTeste][0])
                        nbPointOk += 1
            #print(nbPointOk)
            nbTriangleIntersecte += 1
            p0 = (xPlan[numPointValide[0]][0],yPlan[numPointValide[0]][0])
            p1 = (xPlan[numPointValide[1]][0],yPlan[numPointValide[1]][0])
            mesh2d._ajoutSegment(p0,p1)
        print(fichier3d.pIntersection)

       
def main():

    mesh2d = generateurImage.dessin2d()._initialisationTableauSegment
    intersectionZetDroite(fichier3d,mesh2d)
   
    
main()
import numpy
import operator
from tkinter import *

numpy.seterr(all='ignore')

class dessin2d(object):

    def __init__(self):
            self.nombreDeSegment = 0
            self.segmentYmin = []
            self.segmentYmax = []
            self.segmentXmin = []
            self.segmentPente = []
            self.segment = []
            self.listeDePoint = []

    def _initialisationTableauSegment(self):
            self.nombreDeSegment = 0
        
    def _ajoutSegment(self, p0, p1):
            
            numeroSegment = self.nombreDeSegment

            self.segmentYmin.append(min(p0[1],p1[1]))
            self.segmentYmax.append(max(p0[1],p1[1]))

            self.segmentXmin.append(min(p0[0],p1[0]))
            
            coordonnePoint = (p0,p1)
            print(coordonnePoint)
            self.segmentPente.append(calculateurPenteInverse(coordonnePoint))
            
            self.segment.append(coordonnePoint)
            
            self.nombreDeSegment += 1
            
            

Merci de votre aide


-
Edité par GUIGUI59_ 23 mai 2018 à 8:57:55

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 10:23:52

Salut,

Ligne 25 dans le main tu devrais faire deux lignes, une ou tu crées ton objet et une ou tu appelles _initTableau.

D'ailleurs _initTableau est une fonction, donc pour l'exécuter tu dois mettre des parentheses a la fin du nom.

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 10:51:30

Merci mais cela ne change rien 

J'ai essayer de faire : from generateurImage import * et la je n'ai pas les même erreurs mais il me demande un paramètre self

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 11:00:16

AS-tu essaye de faire ca:

import generateurImage
 
def intersectionZetDroite(mesh2d):
             
            nbPointOk = 0
            # j'ai enlevé un peu de code pour resté focus sur l'endroit ou cela semble foirer
            #print(xPlan)
            #print(yPlan)
            for nbPointTeste in range(3):
                if xPlan[nbPointTeste][1] == True :
                    if yPlan[nbPointTeste][1] == True :
                        numPointValide[nbPointOk] = nbPointTeste
                        fichier3d.pIntersection[nbTriangleIntersecte][nbPointOk] = (xPlan[nbPointTeste][0], yPlan[nbPointTeste][0])
                        nbPointOk += 1
            #print(nbPointOk)
            nbTriangleIntersecte += 1
            p0 = (xPlan[numPointValide[0]][0],yPlan[numPointValide[0]][0])
            p1 = (xPlan[numPointValide[1]][0],yPlan[numPointValide[1]][0])
            mesh2d._ajoutSegment(p0,p1)
        print(fichier3d.pIntersection)
 
        
def main():
 
    mesh2d = generateurImage.dessin2d()
    mesh2d._initialisationTableauSegment()
    intersectionZetDroite(fichier3d,mesh2d)
    
     
main()

Quelles sont les erreurs?

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 11:28:24

Merci beaucoup ça marche mais je ne comprend pas alors la différence entre le point et le égal

Merci

  • Partager sur Facebook
  • Partager sur Twitter
23 mai 2018 à 11:41:14

La différence vient du fait que j'ai mis des parentheses a la fin de ma ligne 26 alors que tu n'en avais pas mis a ta ligne 25. Donc toi tu stocke ta fonction dans mesh2d, moi je cree un objet dans mesh2d puis j'appelle la fonction dessus.

Je pense cela marche (mais a verifier):

import generateurImage
 
def intersectionZetDroite(mesh2d):
             
            nbPointOk = 0
            # j'ai enlevé un peu de code pour resté focus sur l'endroit ou cela semble foirer
            #print(xPlan)
            #print(yPlan)
            for nbPointTeste in range(3):
                if xPlan[nbPointTeste][1] == True :
                    if yPlan[nbPointTeste][1] == True :
                        numPointValide[nbPointOk] = nbPointTeste
                        fichier3d.pIntersection[nbTriangleIntersecte][nbPointOk] = (xPlan[nbPointTeste][0], yPlan[nbPointTeste][0])
                        nbPointOk += 1
            #print(nbPointOk)
            nbTriangleIntersecte += 1
            p0 = (xPlan[numPointValide[0]][0],yPlan[numPointValide[0]][0])
            p1 = (xPlan[numPointValide[1]][0],yPlan[numPointValide[1]][0])
            mesh2d._ajoutSegment(p0,p1)
        print(fichier3d.pIntersection)
 
        
def main():
 
    mesh2d = generateurImage.dessin2d()._initialisationTableauSegment()
    intersectionZetDroite(fichier3d,mesh2d)
    
     
main()



  • Partager sur Facebook
  • Partager sur Twitter