classe + liste dans constructeur ?? [python] - Python - Programmation
Marsh Posté le 11-08-2003 à 11:26:48
self.sous=[]
tu peux le mettre en attribut de classe peut être
Marsh Posté le 11-08-2003 à 11:28:34
nan, a chaqe fois tu obtiendras une nouvelle liste.
Donc :
Code :
|
Maintenant ca depends de ce que tu veux faire...
Si tu veux qu'une seule, faut ptete la passer en parametre de ton constructeur ou la declarer en globale (beurk !!).
Marsh Posté le 11-08-2003 à 11:37:04
Ouai en fait je ne veux qu'une seule liste !!
Puisque dans ma bdd, j'ai une table projet, qui contient bien sur des projets
Avec comme attributs:
- idProjet (l'identifiant du projet)
- name (le nom du projet)
- descr (la description du projet)
- parent (l'identifiant du projet parent)
J'appelle donc dans un premier temps mon constructeur avec la racine = "1" , il va donc chopper tout les projet qui ont ROOT comme parent, ...
Ensuite pour chaque projet (sous-projet de roor) trouvé , je veux trouver ces sous projet, ainsi de suite ...
Et chaque objet doit être créer en tant qu'objet en java ...
Donc une seule liste contenant des objets projet .. j'éssai vos idées on va voir ce que çà donne
Marsh Posté le 11-08-2003 à 11:46:00
ben non, en attribut de classe !
Code :
|
Marsh Posté le 11-08-2003 à 11:51:13
Bon bah j'ai l'impression que çà boucle à l'infini voilà mon code...
Code :
|
Marsh Posté le 11-08-2003 à 11:58:21
En fait quand je lance mon script avec la commande python il me sort çà en gros:
Code :
|
Marsh Posté le 11-08-2003 à 11:59:07
Ouai taz, j'ai essayé ta solution aussi , en metant la liste en variable de classe et çà fait pareil,
Mais atten je vérifie la sortie d'erreur c'est peut etre pas la meme
J'dit mon post: Bah si en fait c pareil !!!
Marsh Posté le 11-08-2003 à 12:03:50
1) t'es que que ta récursion est pas infinie
2) on peut augmenter la profondeur de récursion (et y a un script dans les exemples livrés avec Python genre, find_rec_max_depth)
3) ben sinon, tu fais sauter la récursion, ou bien tu la gère autrement. tu te debrouilles pour faire toutes tes requetes d'abord, et ensuite, à partir de cette liste de resultat, tu crées tes projets. je suis pas sur que ça soit faisable de casser la récursion, tu n'auras qu'a la simuler avec une pile
Marsh Posté le 11-08-2003 à 12:03:52
ProToinou a écrit : Ouai taz, j'ai essayé ta solution aussi , en metant la liste en variable de classe et çà fait pareil, |
Non en fait c pas la meme sortie d'erreur;
Voilà le code:
Code :
|
et l'erreur associée:
Code :
|
Marsh Posté le 11-08-2003 à 12:07:14
Projet.ListProjet
je pensais que y avait pas besoin de préciser
Marsh Posté le 11-08-2003 à 12:09:30
ReplyMarsh Posté le 11-08-2003 à 14:03:51
Je suis de retour, tu avais raison il fallait précisez, mais il y'a toujours la boucle je crois ...
Je vais vider un peu ma table voir si çà va mieux !!!
Marsh Posté le 11-08-2003 à 14:18:55
Bon c'est bon j'ai trouvé d'où venait l'erreur, en fait je faisait la recusrisvité sur le parent du tuple selectionné alors que j'aurai du le faire sur son identifiant ...
Putain j'ai trop de mal à réfléchir là , çà m'énerve ...
Merci pour l'aide en tout cas, çà m'a montré comment mettre la liste en variable global (ou de classe)
Chao
Mais enfin bon çà marche mais çà ne donne pas exactement ce que je voulais non plus mais je pense que je vais trouver quand meme .
Marsh Posté le 11-08-2003 à 14:29:04
tu voulais faire quoi précisément? moi je trouve ça bizarre ton constructeur récursif. j'aurais plutot fait une fonction de classe (sans self donc) qui remplis la liste de classe d'objet. et c'est cette fonction qui gère la récursivité, etc. tu vois le truc?
et pi on n'est pas des PD, je veux voir des new-style classes partout now
Marsh Posté le 11-08-2003 à 14:29:37
Je comprends pas bien...
Tu veux quoi au final ???
Parce que la, tu obtiens une liste de tous les projets...
Si c'est ca alors avoir une variable de classe me semble OK (meme si j'aime pas trop ca).
Par contre, si tu veux conserver l'arborescence, alors la liste doit etre une propriété de ton objet...
Marsh Posté le 11-08-2003 à 14:30:07
Euh une fois que j'ai choppé ma liste d'objet qui reseemble à çà quand je la print:
Code :
|
Comment est ce que je peux l'exploiter ?
Sachant que ce qui m'inporte pour chaque c'est l'id du projet et sa profondeur ainsi que l'ordre qui est important
Marsh Posté le 11-08-2003 à 14:30:51
Taz a écrit : tu voulais faire quoi précisément? moi je trouve ça bizarre ton constructeur récursif. j'aurais plutot fait une fonction de classe (sans self donc) qui remplis la liste de classe d'objet. et c'est cette fonction qui gère la récursivité, etc. tu vois le truc? |
J'vois qu'on est deux a pas trouvé ca très clair
Marsh Posté le 11-08-2003 à 14:34:00
e_esprit a écrit : Je comprends pas bien... |
Ouai alors les gars moi je sais exactement ce que je veux, c'est juste que mon boss m'a imposé cette putain de méthode de constructeur récursif (euh bien sûr je ne lui en veux pas, car il est plutôt super cool avec moi, et il est carrément à un niveau bien au dessus du mien remarque y'a pas de mal)
Enfin bref moi ce que je veux c'est récuperé une liste de mes projets, .. de manière à pouvoir exploiter cette liste plus tard afin de dessiner cette liste en html sous forme d'arboréscence (c'est ce que j'avais réussit à faire mais sans passé par une reflexion orientée objet, et c'est trop crade du coup)
Enfin si vous voulez bien m'exposer clairement comment vous voyez les choses, je ferai comme vous dite et on verra après, je pense que si çà marche et que c'est propre mon boss ne dira rien)
Marsh Posté le 11-08-2003 à 14:41:17
ben comme je t'ai dit. methode statique (de classe et pas d'instance) qui remplis la liste de classe en créant une foultitude de Projet. apres tu surcharges __str__(self) pour Porjet et t'as un joli affichage
Marsh Posté le 11-08-2003 à 14:45:05
Taz a écrit : ben comme je t'ai dit. methode statique (de classe et pas d'instance) qui remplis la liste de classe en créant une foultitude de Projet. apres tu surcharges __str__(self) pour Porjet et t'as un joli affichage |
Ouai alors là TAZ tu oublies un paramêtre c'est que moi je suis un newbie en Python et en orienté objet, et là j'ai du mal à bien saisir, si tu as le temps et l'envi, est ce que tu peux m'explqier brievement ?
Marsh Posté le 11-08-2003 à 14:47:09
Taz a écrit : ben comme je t'ai dit. methode statique (de classe et pas d'instance) qui remplis la liste de classe en créant une foultitude de Projet. apres tu surcharges __str__(self) pour Porjet et t'as un joli affichage |
Je tiens juste a dire que je trouve ca bizarre de placer ca dans le constructeur...
Perso si c'est juste une histoire d'affichage, ta recursivité je la placerai dans la méthode __str__
De plus, le fait de créer la liste te fait perdre toute trace de l'arborescence, non ?
Marsh Posté le 11-08-2003 à 14:51:27
e_esprit a écrit : |
Je ne sais pas de toute façon pour l'instant je n'ai aucune trace d'arborescence, l'idée serait peut etre d'incrémenter une variable profondeur à chaque itération,, pour avoir la profondeur dans l'arbre ...
Mais voilà encore une fois j'attends vos idée sur la question
Au fait c'est quoi la méthode __str__ ... lol laisse tomber pour çà je vais lire si çà existe ,çà doit bien être écrit qque part !!!
Bah non putain y'a pas de çà dans ma doc, en tout cas pas dans l'index, et j'ai pas envo de me taper les 800 pages pour le trouver, mais çà doit etre du coté de l'__init__ non ?
Je me gourre là ?
Marsh Posté le 11-08-2003 à 14:53:37
Code :
|
Marsh Posté le 11-08-2003 à 14:54:36
ProToinou a écrit : |
pour convertir en chaine et donc faire de l'affichage
Marsh Posté le 11-08-2003 à 15:01:18
Et donc apres il faut faire un monprojet.liste._str__() ??
c'est çà ou pas ?
Marsh Posté le 11-08-2003 à 15:02:29
non. comme tout ce qui est __truc__ c'est des opérateurs à surchargé.
essaye
p=Projet()
print p
Marsh Posté le 11-08-2003 à 15:04:47
Taz a écrit : non. comme tout ce qui est __truc__ c'est des opérateurs à surchargé. |
c'est quoi que tu appelle des opérateurs à surcharger ??
C'est des trucs qui vont faire que le comportement de la commande print va se trouver modifier, par exemple ?
Marsh Posté le 11-08-2003 à 15:09:47
Bon je vais lire la doc complete de python.org sur le langage orienté objet avec python parceque là çà ne va pas ..
je suis à la masse c'est trop grave ...
Merci de l'aide en tout cas, à plus quand j'en saurai un peu plus
Marsh Posté le 11-08-2003 à 15:21:13
Putain c'est vraiment pas évident, je ne suis pas une grosse merde en anglais mais là, çà parle d'un concept quand meme assez fort qu'est le langage orienté objet, ...
Et forcément je ne connais pas la signification de tous les mots anglais, alors çà este compliqué à comprendre, ...
ça fait chier ..
Marsh Posté le 11-08-2003 à 15:41:05
Bon faut m'aider j'ai un peu près lu là, mais çà ne va pas m'aider bcp...
Comment feriez vous conraitement vous ...???
Je repete ce que je veux exactement ...
Je veux présenter sous forme d'arbre, l'arboresscence de projet et de sous projet à l'aide d'un code orienté objet.
A coté de çà les taches et projets sont rangés sans des tables différentes ...
Voici la table projet
Code :
|
Et voici la table tache:
Code :
|
D'autre part l'affichage de l'arbre des projet/taches ne se fera pas toujours de la meme manière.
Pour certaines pages on voudra avoir l'affichage des projets qui ne sont définis que dans la table preference pour un utilisateur donné.
Dans un autre cas ou vondra la l'arbre de tout les projet et taches qques soit l'utilisateur connecté, ...
Voici la table preference
Code :
|
Marsh Posté le 11-08-2003 à 15:47:46
Bah c'est une arborescence...
Donc chaque projet a 0 ou plusieurs liste de sous-projets => liste pour chaque projet (la premiere methode que tu avais choisie).
Par contre, evite le print dans le constructeur, c'est pas très propre.
Marsh Posté le 11-08-2003 à 15:55:56
Rooh c'est bon çà m'énerve je ne vais pas passer par des listes, je vais direcetement faire le traitement avec la base.
Marsh Posté le 11-08-2003 à 15:59:36
Juste une petite question comment est ce qu'on peut attribué une valeur à une variable d'une classe à une autre avec python ?
Marsh Posté le 11-08-2003 à 16:19:24
ProToinou a écrit : Juste une petite question comment est ce qu'on peut attribué une valeur à une variable d'une classe à une autre avec python ? |
TaClasse.taVariable = taValeur
Marsh Posté le 12-08-2003 à 10:21:42
Taz a écrit : tu voulais faire quoi précisément? moi je trouve ça bizarre ton constructeur récursif. j'aurais plutot fait une fonction de classe (sans self donc) qui remplis la liste de classe d'objet. et c'est cette fonction qui gère la récursivité, etc. tu vois le truc? |
Au fait c'est quoi des new style classe ?
Et est ce que tu peux me redire comment on fait pour récuperer les informations sur les objets créés...
Et aussi comment je peux faire pour que pour chaque objet crée il y ai, une variable profondeur, id, ... ???
Marsh Posté le 11-08-2003 à 11:21:56
salut je suis toujours dans mon projet et je le passe en modelisation object...
j'ai donc une classe Projet et je veux faire un constructeur recursif, qui me sort une liste d'objet de type Projet.
Les objects crée correspondent à une liste de projet ayant la meme racine
pour l'instant çà ressemble à:
et voilà alors le pb c'est que c'est n'importe quoi le self.sous.append, (c'était pour mettre qqchose)
Et je voudrais donc savoir comment et où déclarer mon début de liste, et où l'initialiser aussi ?
Voili voilou (en fait je me retrouve emmerder parceque si je l'a créer dans le constructeur il me semble qu'elle va etre réinitialiser à chaque nouvelle création d'objet, ce qui ne me plait pas ...
Donc voilà si vous pouviez m'aider