Accueil > Forum > > > > Appeler une méthode d’objet juste construit / comparaison profonde
Appeler une méthode d’objet juste construit / comparaison profonde
vendredi 20 février 2009 à 10:52:44 |
Appeler une méthode d’objet juste construit / comparaison profonde

gaspos
|
Bonjour, y a-t-il un moyen d'appeler méthode d'objet juste construit ? Voici un bout de code pour comprendre ma question : class Spam: '''Une petite classe qui ne sert qu'à donner un exemple.''' def __init__(self): self.eggs = 0 def set (self,x,message): self.eggs = x print message,': eggs =',self.eggs # ce que je suis obligé de faire mais qui fonctionne s1 = Spam() s1.set( 12,'appels séparés') # appels séparés : eggs = 12 print s1 # <__main__.Spam instance at 0x00B557B0> print s1.eggs # 12 # ce que je voudrais pouvoir faire mais qui ne fonctionne pas s2 = Spam().set( 5,'appels enchainés') # appels enchainés : eggs = 5 print s2 # None And now for something completely different ! Comparaison profonde : voici un autre bout de code : class Bean: def __init__ (self,x): self.eggs = x bean1 = Bean( 5 ) bean2 = Bean( 5 ) print bean1 == bean2 # False # y a-t-il un moyen de comparer les contenus (et non les pointeurs) ? Voilà, si quelqu'un a une idée, je suis preneur. Merci Hadrien
|
|
vendredi 20 février 2009 à 16:50:09 |
Re : Appeler une méthode d’objet juste construit / comparaison profonde

gaspos
|
C'est re-moi ! En relisant mon post je m'aperçois que je risque d'avoir droit à une réponse du genre :
"gros nigaud, t'as qu'à passer le paramètre 'x' directement au __init__ de ta classe Spam ! et pas besoin de la méthode set !" 
Ce à quoi je réponds par avance :
"bé oui, dans ce cas d'école, bien sûr... mais dans mon vrai cas à moi, très simplifié ici, j'ai déjà un __init__ avec plein de paramètres, et je ne veux pas le polluer avec un autre qui ne serait là que pour ça..."
Hadrien
|
|
mardi 24 février 2009 à 10:49:19 |
Re : Appeler une méthode d?objet juste construit / comparaison profonde

aera group
|
Ah enfin une question intéressante merci l'ami ! Pour réaliser ce que tu veux faire, il faut utilisé des méthodes particulières sur les classes référencés en anglais (  ) à cette adresse ! En gros, voici un exemple pour résoudre tes 2 problèmes : class Spam: def __init__(self): self.eggs = 0
def__str__(self): return str(self.eggs)
def __cmp__(self, other): return self.eggs - other.eggs
def set (self,x,message): self.eggs = x print message,': eggs =',self.eggs test1 = Spam() test2 = Spam() test3 = Spam()
test1.set(2,"Appel") test2.set(5,"Test") test3.set(5,"Une autre phrase")
print test1 print test2
print test1 < test2 print test1 > test2 print test1 == test2 print test2 == test3Cette exemple montre bien comment résoudre ton problème. Cela dit dans ce que tu demandé tu voulais comparer l'appel d'une fonction : s2 = Spam().set( 5,'appels enchainés') # appels enchainés : eggs = 5 print s2 # None
Impossible de comparer l'appel d'une fonction, en faisant ça, tu enregistre dans c2 ce que renvoie la fonction c'est à dire rien : None On ne peut que comparer des classes entières.
Précision :__cmp__ permet de comparer deux classes. L'argument est l'adresse de la deuxième classe. pour comparer, la fonction doit renvoyer un nombre issu normalement de la différence entre la première classe et la deuxième classe (négatif si class2>class1, etc ...) Cela dit, faire la différence comme on vient de le faire ne permet de comparer qu'un paramètre ici eggs. Supposons le protocole suivant : une classe Spam est supérieur à une autre ssi eggs1 > egg2 (egg1 appartient à la première classe et inversement). Si il y à égalité, alors, la phrase rentre en compte : Si la phrase est la même alors, les classes sont égales sinon, la classe supérieur à l'autre est celle qui à la phrase la première dans l'ordre alphabétique !
On doit écrire une classe Spam resemblant à ça :
class Spam: def __init__(self): self.eggs = 0 self.message = '' def __str__(self): return str(self.eggs) def __cmp__(self, other): if self.eggs < other.eggs: return -1 elif self.eggs > other.eggs: return 1 else: if self.message < other.message: return 1 if self.message > other.message: return -1 else: return 0 def set (self,x,message): self.eggs = x self.message = message print message,': eggs =',self.eggs
test1 = Spam() test2 = Spam() test3 = Spam() test4 = Spam()
test1.set(2,"Appel") test2.set(5,"Test") test3.set(5,"Une autre phrase") test4.set(5,"Une autre phrase")
print test1 < test2 print test1 == test2 print test2 == test3 print test2 > test3 print test3 == test4
Les tests confirmes que la fonction de comparaison est au point. Deuxième précision la fonction __str__ renvoie obligatoirement une chaine de carractères. C'est cette fonction qui permet de renvoyer une valeur quand on utilse print (et uniquement il me semble) ! Pour renvoyer une valeur (en chaine de carractère) en toute condition il faut utiliser __repr__ (qui fonctionne de la même manière).
Dernière chose, n'utilse pas set comme fonction, c'est un mot clé Python, utilse plutôt set_ ou tout autre mot qui n'est pas réservé par Python (il est d'ailleur étonnant que Python ne génère pas de message d'erreur)
Voila tu sait tout, bonne continuation ...
______
Aéra 
|
|
samedi 28 février 2009 à 19:21:40 |
Re : Appeler une méthode d'objet juste construit

Chouchou182
|
Bonjour,
Il me semble que pour pouvoir écrire:
s = Spam().set(...)
il suffit de terminer la fonction set par
return self
Bonne prog, -- Chouchou.
|
|
Cette discussion est classée dans : self, print, s1, appels, eggs
Répondre à ce message
Sujets en rapport avec ce message
heklp serverSocket [ par Harvester_ ]
Voila j'ai utliser un script du siteC'est un server socket qui marchait tres bien au debut(source)#!C:\Python23\python.exeimport SocketServerimport sy
Socket : charger ip depuis fichier [ par Shinji ]
Bonjour @ ttes et @ ts, voici mon pb: j'essaye de faire une petite app client/serveur et j'aimerais pouvoir enregister l'ip/port du serveur dans un
IDLE : une mauvaise plaisanterie ? [ par steede ]
Bonjour, je débute la programmation (enfin je m'y remets...et je suis autodidacte) et j'ai d'énormes problèmes avec Python à savoir : - toutes les
Comment lancer son application !!!!!!!!!! [ par steede ]
Voila, j'ai écrit (pompé) une malheureuse app (extraite d'un exemple "simple" de wx) et j'aimerais la faire fonctionner !!!!ci dessous la ligne de la
Il me manque une librairie [ par cipher16 ]
Bonjour ... je viens de commencer à coder en python ... et il semblerai qu'il me manque une librairie ayant un rapport avec internet ... J'ai cherché
Comment ouvrir une page web? [ par tipro75 ]
Comment peut-on ouvrir un fichier (text dans ce cas(format html dans ce cas)) sur internet exemple :je veut lire une page toute les 1 minute pour voir
Python 3.0 [ par xeolin ]
Que pensez vous de la version 3.0 de python ? De la modifiquation de la commande "print" ? Perso, moi je trouve que c'est une bonne chose MAIS pas p
Class has no attribute !?!? [ par RV2931 ]
BonjourJ'ai récupéré un petit programme "Hello world" d'un tuto wxPython de développez.com que voici :# !/usr/bin/python# -*- coding: iso885915 -*-im
héritage de wxObject et polymorphisme ?? [ par RV2931 ]
Bonjour,Je programme en wxPython et j'aurai voulu savoir comment dériver un objet wx pour faire un bouton personalisé par exemple, avec des informatio
connexion python [ par tsic ]
Bonjour, Voilà, j'ai débuté recemment avec python et je veux faire une connexion client serveur (windows) par l'intermédiaire d'une interface QT Desig
Livres en rapport
|
Derniers Blogs
[MSTD10] SHAREPOINT 2010 ET TEAM FOUNDATION SERVER[MSTD10] SHAREPOINT 2010 ET TEAM FOUNDATION SERVER par phil
Un post rapide pour vous informer de la disponibilité de la vidéo de ma présentation sur SharePoint 2010 & Team Foundation Server. http://www.microsoft.com/france/vision/mstechdays10/Webcast.aspx?EID=20215d48-02e3-4d43-8c36-e53505c3b316 Dans la ...
Cliquez pour lire la suite de l'article par phil [MSTD10] SQL SERVER 2008 POUR LES DéVELOPPEURS ET VISUAL STUDIO TEAM SYSTEM DATABASE EDITION[MSTD10] SQL SERVER 2008 POUR LES DéVELOPPEURS ET VISUAL STUDIO TEAM SYSTEM DATABASE EDITION par Miiitch
Lors de cette session que j'ai animé avec Rui , j'ai eu l'occasion de présenter, en plus des nouveautés de SQL Server 2008, comment utiliser l'édition "database" de Visual Studio 2008. Le principe? Avoir les mêmes outils lors que l'on travaille avec une b...
Cliquez pour lire la suite de l'article par Miiitch [WF4] LOCALISER SIMPLEMENT UNE ACTIVITé ET SON DESIGNER WPF[WF4] LOCALISER SIMPLEMENT UNE ACTIVITé ET SON DESIGNER WPF par JeremyJeanson
La localisation . vous connaissez ce system miraculeux qui permet à votre application de s'afficher dans la langue de l'utilisateur (à condition de l'avoir intégrée dans votre programme). Comment mettre en place la localisation dans WF4? Cette question m'...
Cliquez pour lire la suite de l'article par JeremyJeanson [TECHDAYS 2010] WEBCASTS ET SLIDES[TECHDAYS 2010] WEBCASTS ET SLIDES par Audrey
Les webcasts des sessions des Techdays 2010 sont maintenant disponibles en ligne ! Me concernant, voici les slides et le webcast de la session Blend 3 / Skechtflow : Dessinez c'est gagné ! (animée avec Michel Perfetti ) Les slides et le webcast : Blend 3/...
Cliquez pour lire la suite de l'article par Audrey NDEPEND V3. J'ADORE SON INTéGRATION AVEC VS2010NDEPEND V3. J'ADORE SON INTéGRATION AVEC VS2010 par tja
Après une petite introduction à son utilisation que vous pouvez lire ici j'ai également eu envie d'installer ma copie et de jouer un peu avec. Après les premières minutes de son utilisation. J'ai tout de suite ADORE. L'utilisation intuitive sans besoi...
Cliquez pour lire la suite de l'article par tja
Forum
MCD LYCéMCD LYCé par Wiliam123
Cliquez pour lire la suite par Wiliam123
Logiciels
Rigs of Rods (63.3)RIGS OF RODS (63.3)c'est un jeu de multi-simulation camions,autobus voitures, avions, bateaux, hélicoptère avec défo... Cliquez pour télécharger Rigs of Rods Konvertor (4.00)KONVERTOR (4.00)Le logiciel est un gestionnaire multimedia affichant, jouant et convertissant plus de 2000 format... Cliquez pour télécharger Konvertor Xlite (v 3.0 build 41150)XLITE (V 3.0 BUILD 41150)c'est un logiciel qui permet de téléphoner par Internet à l'aide d'un compte SIP pratique pour le... Cliquez pour télécharger Xlite Academy System (10.9.3.0)ACADEMY SYSTEM (10.9.3.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System
|