bonjour,
[...]
Mais il y a aussi des méthodes statiques et des méthodes de classe, et
je n'ai pas compris leur intérêt.
La notion de propriété me semble très élégante, permettant de présenter
les définitions d'un élément d'une classe de façon compacte et claire.
On gagne en développement et en maintenance.
Par contre, je n'ai pas compris le paragraphe qui traite de l'appel
coopératif des méthodes des super classes. Mais je crois pouvoir m'en
passer vu que je ne fais aucun héritage multiple. A vérifier.
j'avancerai prudemment dès qu'il y aura héritage...
Il me reste à lire le chapitre sur les méta classes, ce sera pour demain,
mais vu l'intro, j'ai peur que ce soit un peu obscure.
[...]
bonjour,
[...]
Mais il y a aussi des méthodes statiques et des méthodes de classe, et
je n'ai pas compris leur intérêt.
La notion de propriété me semble très élégante, permettant de présenter
les définitions d'un élément d'une classe de façon compacte et claire.
On gagne en développement et en maintenance.
Par contre, je n'ai pas compris le paragraphe qui traite de l'appel
coopératif des méthodes des super classes. Mais je crois pouvoir m'en
passer vu que je ne fais aucun héritage multiple. A vérifier.
j'avancerai prudemment dès qu'il y aura héritage...
Il me reste à lire le chapitre sur les méta classes, ce sera pour demain,
mais vu l'intro, j'ai peur que ce soit un peu obscure.
[...]
bonjour,
[...]
Mais il y a aussi des méthodes statiques et des méthodes de classe, et
je n'ai pas compris leur intérêt.
La notion de propriété me semble très élégante, permettant de présenter
les définitions d'un élément d'une classe de façon compacte et claire.
On gagne en développement et en maintenance.
Par contre, je n'ai pas compris le paragraphe qui traite de l'appel
coopératif des méthodes des super classes. Mais je crois pouvoir m'en
passer vu que je ne fais aucun héritage multiple. A vérifier.
j'avancerai prudemment dès qu'il y aura héritage...
Il me reste à lire le chapitre sur les méta classes, ce sera pour demain,
mais vu l'intro, j'ai peur que ce soit un peu obscure.
[...]
+1
Et, en plus, quelques explications sur les métaclasses seraient aussi
appréciées.
+1
Et, en plus, quelques explications sur les métaclasses seraient aussi
appréciées.
+1
Et, en plus, quelques explications sur les métaclasses seraient aussi
appréciées.
Pour les meta classes, un papier (anglais) que j'avais bien apprecie
etait celui de Dr. Mertz, sur ibm developper workds (google ibm,
charming python ....)
j'ai lu le paragraphe dans mon bouquin. ça vole très haut, j'ai pas tout
Pour le reste ,
methode static et de classes:
*En python* (notez les '*') on a
staticmethod(func)->func
Cela sert, dans le cadre d'une classe a proposer une methode qui ne
porte pas sur la classe ni sur une instance, mais qui doit quand meme
etre attachée a la classe.
par exemeple, pour la classe dict, la methode dict.fromkeys est
statique.
tu l'appelles depuis la classe dict et non pas une de ces instances.
Un exemple d'utilisation classque (comme dict.fromkeys, d'ailleurs) et
pour la creation d'instance de la classe. Une pseudo-forme de factory.
factory ? C'est du C++ ? Python est le seul langage orienté objet que je
Pour rappel, la methode statique dict.fromkeys prends en entrée un
tableaux de valeurs et renvoie une instance de dictionnaire, qui
possede comme clefs chacune des valeurs passées.
Comme on peut le voir sur cette exemple, on a bien une methode qui est
en rapport avec les dictionnaires (vu que ca en renvois un) mais qui
n'a pas besoin de la classe on d'une instance de la classe pour
fonctionner.
Du coup, l'avantage, c'est que dans la signature de la classetu n'as
pas besoin de 'self' (on pardonnera le raccourcis, mias bon, c'est
comprehensible)
class toto:
def methodClassqiue(self, obj):print obj
def methodStatic() :#<- rien !!
print 'coucou'
methodStatic=staticmethod(methodStatic)
t=toto()
t.methodStatic()
-> coucou
toto.methodStatic()
-> coucou
Alors que self n'est pas en parametre.
en effet, sans la ligne truc = staticmethod(bidule), ça ne fonctionne pas.
Pour les methodes de classes ,c'est quasiment pareil, sauf que dans la
signature, ce n'est pas self, une etiquette sur un nom d'instance que
l'on veut recevoir, mais 'klass' (ou n'importe quoi bien sur) une
etiquette sur la classe elle même.
j'ai lu dans ce bouquin que la convention pour le premier paramètre
Pour ce qui est de "'appel coopératif des méthodes des superclasses""
effectivement, ca ne m'a jamais trop servis.
C'est juste qu'il y a un ordre d'appel, qui est place au niveau de la
classe ou de l'instance (je ne sais plus), denote par mro (mzo ?) et
qui permet juste de regler des conflits d'appels 'en carreaux'
(traduction litteralle de diamonds call).
Tu comprends quand ca t'arrivera justement.
ok pour la différence des ordres de recherche dans les différents
Voila, et pour terminer, les metaclasses, on croit que c'est obscure,
mais encore une fois c'est un coup a prendre.
Il faut juste s'imaginer qu'une classe, en tant objet, a elle même une
classe dont elle est instance. Pour ne pas se brouiller dans les
termes, il me semble bien qu'on dira, en python, qu'on objet est
instance d'une classe et qu'une classe est instance d'un type.
De base, tous les objets on le type que leur fournit la classe dont
ils sont instances.
Par exemple, si un objet derive de la classe objet, il aura le type
'instance', et le type de son type sera bien le type de sa classe
(object) donc 'type'.
Sympa comme phrase !
Maintenant, vous êtes encore plus embrouille.
Tout ca pour dire que cela permet de modifier massivement des classes
entieres *a la creation de la classe*.
Grosso modo, pour vous donner un parallelle (et pour me la peter) ca
me permet de modfifier en 4 lignes bien placer toutes les classes de
la librairies wxPython pour que ceux ci aient des proprietes en plus
de leur Getter & Setter
Exemple:
en plus de frame.GetSize et frame.SetSize, ma metaclass rajoute
automatiquement a la creation de la classe une propriete Size tel que
print frame.Size appelle frame.GetSize()
frame.Size=1 appelle frame.SetSize(1)
Clean, non !
c'est bien ce qui me semblait, je devrais pouvoir vivre sans.
En epserant que cela siot utile et pas trop pleins d'incorrections
---OPQ
coquilles mises à part, c'était utile. merci.
Pour les meta classes, un papier (anglais) que j'avais bien apprecie
etait celui de Dr. Mertz, sur ibm developper workds (google ibm,
charming python ....)
j'ai lu le paragraphe dans mon bouquin. ça vole très haut, j'ai pas tout
Pour le reste ,
methode static et de classes:
*En python* (notez les '*') on a
staticmethod(func)->func
Cela sert, dans le cadre d'une classe a proposer une methode qui ne
porte pas sur la classe ni sur une instance, mais qui doit quand meme
etre attachée a la classe.
par exemeple, pour la classe dict, la methode dict.fromkeys est
statique.
tu l'appelles depuis la classe dict et non pas une de ces instances.
Un exemple d'utilisation classque (comme dict.fromkeys, d'ailleurs) et
pour la creation d'instance de la classe. Une pseudo-forme de factory.
factory ? C'est du C++ ? Python est le seul langage orienté objet que je
Pour rappel, la methode statique dict.fromkeys prends en entrée un
tableaux de valeurs et renvoie une instance de dictionnaire, qui
possede comme clefs chacune des valeurs passées.
Comme on peut le voir sur cette exemple, on a bien une methode qui est
en rapport avec les dictionnaires (vu que ca en renvois un) mais qui
n'a pas besoin de la classe on d'une instance de la classe pour
fonctionner.
Du coup, l'avantage, c'est que dans la signature de la classetu n'as
pas besoin de 'self' (on pardonnera le raccourcis, mias bon, c'est
comprehensible)
class toto:
def methodClassqiue(self, obj):print obj
def methodStatic() :#<- rien !!
print 'coucou'
methodStatic=staticmethod(methodStatic)
t=toto()
t.methodStatic()
-> coucou
toto.methodStatic()
-> coucou
Alors que self n'est pas en parametre.
en effet, sans la ligne truc = staticmethod(bidule), ça ne fonctionne pas.
Pour les methodes de classes ,c'est quasiment pareil, sauf que dans la
signature, ce n'est pas self, une etiquette sur un nom d'instance que
l'on veut recevoir, mais 'klass' (ou n'importe quoi bien sur) une
etiquette sur la classe elle même.
j'ai lu dans ce bouquin que la convention pour le premier paramètre
Pour ce qui est de "'appel coopératif des méthodes des superclasses""
effectivement, ca ne m'a jamais trop servis.
C'est juste qu'il y a un ordre d'appel, qui est place au niveau de la
classe ou de l'instance (je ne sais plus), denote par mro (mzo ?) et
qui permet juste de regler des conflits d'appels 'en carreaux'
(traduction litteralle de diamonds call).
Tu comprends quand ca t'arrivera justement.
ok pour la différence des ordres de recherche dans les différents
Voila, et pour terminer, les metaclasses, on croit que c'est obscure,
mais encore une fois c'est un coup a prendre.
Il faut juste s'imaginer qu'une classe, en tant objet, a elle même une
classe dont elle est instance. Pour ne pas se brouiller dans les
termes, il me semble bien qu'on dira, en python, qu'on objet est
instance d'une classe et qu'une classe est instance d'un type.
De base, tous les objets on le type que leur fournit la classe dont
ils sont instances.
Par exemple, si un objet derive de la classe objet, il aura le type
'instance', et le type de son type sera bien le type de sa classe
(object) donc 'type'.
Sympa comme phrase !
Maintenant, vous êtes encore plus embrouille.
Tout ca pour dire que cela permet de modifier massivement des classes
entieres *a la creation de la classe*.
Grosso modo, pour vous donner un parallelle (et pour me la peter) ca
me permet de modfifier en 4 lignes bien placer toutes les classes de
la librairies wxPython pour que ceux ci aient des proprietes en plus
de leur Getter & Setter
Exemple:
en plus de frame.GetSize et frame.SetSize, ma metaclass rajoute
automatiquement a la creation de la classe une propriete Size tel que
print frame.Size appelle frame.GetSize()
frame.Size=1 appelle frame.SetSize(1)
Clean, non !
c'est bien ce qui me semblait, je devrais pouvoir vivre sans.
En epserant que cela siot utile et pas trop pleins d'incorrections
---OPQ
coquilles mises à part, c'était utile. merci.
Pour les meta classes, un papier (anglais) que j'avais bien apprecie
etait celui de Dr. Mertz, sur ibm developper workds (google ibm,
charming python ....)
j'ai lu le paragraphe dans mon bouquin. ça vole très haut, j'ai pas tout
Pour le reste ,
methode static et de classes:
*En python* (notez les '*') on a
staticmethod(func)->func
Cela sert, dans le cadre d'une classe a proposer une methode qui ne
porte pas sur la classe ni sur une instance, mais qui doit quand meme
etre attachée a la classe.
par exemeple, pour la classe dict, la methode dict.fromkeys est
statique.
tu l'appelles depuis la classe dict et non pas une de ces instances.
Un exemple d'utilisation classque (comme dict.fromkeys, d'ailleurs) et
pour la creation d'instance de la classe. Une pseudo-forme de factory.
factory ? C'est du C++ ? Python est le seul langage orienté objet que je
Pour rappel, la methode statique dict.fromkeys prends en entrée un
tableaux de valeurs et renvoie une instance de dictionnaire, qui
possede comme clefs chacune des valeurs passées.
Comme on peut le voir sur cette exemple, on a bien une methode qui est
en rapport avec les dictionnaires (vu que ca en renvois un) mais qui
n'a pas besoin de la classe on d'une instance de la classe pour
fonctionner.
Du coup, l'avantage, c'est que dans la signature de la classetu n'as
pas besoin de 'self' (on pardonnera le raccourcis, mias bon, c'est
comprehensible)
class toto:
def methodClassqiue(self, obj):print obj
def methodStatic() :#<- rien !!
print 'coucou'
methodStatic=staticmethod(methodStatic)
t=toto()
t.methodStatic()
-> coucou
toto.methodStatic()
-> coucou
Alors que self n'est pas en parametre.
en effet, sans la ligne truc = staticmethod(bidule), ça ne fonctionne pas.
Pour les methodes de classes ,c'est quasiment pareil, sauf que dans la
signature, ce n'est pas self, une etiquette sur un nom d'instance que
l'on veut recevoir, mais 'klass' (ou n'importe quoi bien sur) une
etiquette sur la classe elle même.
j'ai lu dans ce bouquin que la convention pour le premier paramètre
Pour ce qui est de "'appel coopératif des méthodes des superclasses""
effectivement, ca ne m'a jamais trop servis.
C'est juste qu'il y a un ordre d'appel, qui est place au niveau de la
classe ou de l'instance (je ne sais plus), denote par mro (mzo ?) et
qui permet juste de regler des conflits d'appels 'en carreaux'
(traduction litteralle de diamonds call).
Tu comprends quand ca t'arrivera justement.
ok pour la différence des ordres de recherche dans les différents
Voila, et pour terminer, les metaclasses, on croit que c'est obscure,
mais encore une fois c'est un coup a prendre.
Il faut juste s'imaginer qu'une classe, en tant objet, a elle même une
classe dont elle est instance. Pour ne pas se brouiller dans les
termes, il me semble bien qu'on dira, en python, qu'on objet est
instance d'une classe et qu'une classe est instance d'un type.
De base, tous les objets on le type que leur fournit la classe dont
ils sont instances.
Par exemple, si un objet derive de la classe objet, il aura le type
'instance', et le type de son type sera bien le type de sa classe
(object) donc 'type'.
Sympa comme phrase !
Maintenant, vous êtes encore plus embrouille.
Tout ca pour dire que cela permet de modifier massivement des classes
entieres *a la creation de la classe*.
Grosso modo, pour vous donner un parallelle (et pour me la peter) ca
me permet de modfifier en 4 lignes bien placer toutes les classes de
la librairies wxPython pour que ceux ci aient des proprietes en plus
de leur Getter & Setter
Exemple:
en plus de frame.GetSize et frame.SetSize, ma metaclass rajoute
automatiquement a la creation de la classe une propriete Size tel que
print frame.Size appelle frame.GetSize()
frame.Size=1 appelle frame.SetSize(1)
Clean, non !
c'est bien ce qui me semblait, je devrais pouvoir vivre sans.
En epserant que cela siot utile et pas trop pleins d'incorrections
---OPQ
coquilles mises à part, c'était utile. merci.
Bonsoir !
Mais quelles différences "réelles" y a t'il, entre les métaclasses, et les
superclasses ? Dans ton exemple, pour wxPython, rien n'empêcherait de faire
une classe intermédiaire, qui fournirait le "Size", et d'en faire hériter
les autres, non ?
@+
Bonsoir !
Mais quelles différences "réelles" y a t'il, entre les métaclasses, et les
superclasses ? Dans ton exemple, pour wxPython, rien n'empêcherait de faire
une classe intermédiaire, qui fournirait le "Size", et d'en faire hériter
les autres, non ?
@+
Bonsoir !
Mais quelles différences "réelles" y a t'il, entre les métaclasses, et les
superclasses ? Dans ton exemple, pour wxPython, rien n'empêcherait de faire
une classe intermédiaire, qui fournirait le "Size", et d'en faire hériter
les autres, non ?
@+