Creation d'objet a partir d'un fichier - espace de nom -
Bonjour a tous,
je souhaite a partir d un fichier ".txt" extraire/creer plusieur objets a l aide d'une boucle.
Tous marche "presque" bien, J'ouvre le fichier, je parviens a extraire les donnees, a creer les objets......sauf que pour utilser les objets a la fin de la procedure, je les ranges dans une liste. (je n'ai pas trouver d'autre solutions..Pb d'espace des noms....
Un print sur la liste me confirme bien la creation des objets (meme si c'est pas tres causants....
>>> print liste_point
[<__main__.Point instance at 0x00E63F30>,......etc.....]
Mon probleme viens du fait de vouloir utiliser les objets de cette liste, par exemple calculer la distance entre 2 points, comment faire pour retrouver le nom exact de mes objets ...???? (Une solution est d'integrer ce nom dans l'objet ? mais cela ne repons pas a mon probleme d'utilisation de l'objet en question..., de plus cela m'oblige a gerer une liste parallele... cela me semble lourds, apres plusieur heures de recherche sur Internet, je vous appelle a l'aide.... Merci par avance
ci dessous mon code .....
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| Fichier point.txt (fichier d'entree)
POINT 1 40 60
POINT 2 10 -5
POINT 3 0 60
class Point:
"""Definiion d'un point"""
def __init__(self,x=0, y=0):
self.x =float(x)
self.y =float(y)
def lit_point (fichier):
'ouvre un fichier .txt et extrait les points'
fs=open(fichier,'r')
LISTE_POINT =[]
while 1:
ligne=fs.readline()
if ligne=="":
break
else:
ligne=ligne[:-1] # suppression du caractere de fin de ligne
if "POINT" in ligne[0:7].upper():# longeur des champs 8 caracteres
nom="P"+ligne[8:16].strip() # creation du nom du point
nom=Point(x=ligne[16:24].strip(),y=ligne[24:32].strip()) # creation de l'objet point
LISTE_POINT.append(nom) # Ajout du nouveau point a la liste
fs.close()
return LISTE_POINT # Fin de boucle While
from math import sqrt
def distance(pt1,pt2):
'calcul la distance entre 2 points'
distance =sqrt((pt2.x-pt1.x)**2+(pt2.y-pt1.y)**2+(pt2.z-pt1.z)**2)
return distance |