En python, une méthode est une fonction qui prend l'objet comme premier paramètre. Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
-- Amaury
Bonsoir,
Je souhaite passer une fonction de string en paramêtre (islower,
isupper, ...); je n'y arrive pas ...
déja essayé :
param_func = str.islower
mais "string".param_func() donne l'erreur
AttributeError: 'str' object has no attribute 'param_func'
En python, une méthode est une fonction qui prend l'objet comme premier
paramètre. Certains considèrent que la notation "appel de méthode"
x.islower()
n'est qu'un raccourci pour
type(x).islower(x)
En python, une méthode est une fonction qui prend l'objet comme premier paramètre. Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
-- Amaury
Bruno Desthuilliers
Bonsoir,
Je souhaite passer une fonction de string en paramêtre (islower, isupper, ...); je n'y arrive pas ...
déja essayé :
param_func = str.islower
mais "string".param_func() donne l'erreur
AttributeError: 'str' object has no attribute 'param_func'
En python, une méthode est une fonction qui prend l'objet comme premier paramètre.
<pédant> En Python, une méthode est un wrapper autour d'une fonction, lequel wrapper appelle la fonction en lui passant l'objet comme premier paramètre. <pedant-plus-plus>en fait, c'est même un peu plus compliqué que ça </pedant-plus-plus> </pédant>
Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python fonctionne.
La class function implémente le protocole descripteur (le même qui sert pour les properties). Lorsqu'une fonction est un attribut d'une classe, le 'lookup' de cet attribut déclence l'appel du protocol descripteur de la fonction (methode __get__(obj, type) de la fonction), lequel retourne soit une bound method (si obj != None), soit une unbound method (si obj == None) - dans les deux cas, une instance de la classe instancemethod (la différence étant que dans le premier cas l'attribut im_self de l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la fonction (attribut im_func), l'objet (im_self) et la class (im_class), et, lors de l'appel, soit injecte im_self comme premier paramètre (bond method), soit vérifie que le premier paramètre passé est bien une instance de im_class (unbound method). En bref, c'est un exemple d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement, le premier en faisant en sorte que im_func soit appelée avec im_class au lieu de im_self, le second en n'injectant aucun paramètre supplémentaire (en fait, la méthode __get__ de staticmethod se contente de retourner im_func telle que...)
HTH
Bonsoir,
Je souhaite passer une fonction de string en paramêtre (islower,
isupper, ...); je n'y arrive pas ...
déja essayé :
param_func = str.islower
mais "string".param_func() donne l'erreur
AttributeError: 'str' object has no attribute 'param_func'
En python, une méthode est une fonction qui prend l'objet comme premier
paramètre.
<pédant>
En Python, une méthode est un wrapper autour d'une fonction, lequel
wrapper appelle la fonction en lui passant l'objet comme premier
paramètre. <pedant-plus-plus>en fait, c'est même un peu plus compliqué
que ça </pedant-plus-plus>
</pédant>
Certains considèrent que la notation "appel de méthode"
x.islower()
n'est qu'un raccourci pour
type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python
fonctionne.
La class function implémente le protocole descripteur (le même qui sert
pour les properties). Lorsqu'une fonction est un attribut d'une classe,
le 'lookup' de cet attribut déclence l'appel du protocol descripteur de
la fonction (methode __get__(obj, type) de la fonction), lequel retourne
soit une bound method (si obj != None), soit une unbound method (si obj
== None) - dans les deux cas, une instance de la classe instancemethod
(la différence étant que dans le premier cas l'attribut im_self de
l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la
fonction (attribut im_func), l'objet (im_self) et la class (im_class),
et, lors de l'appel, soit injecte im_self comme premier paramètre (bond
method), soit vérifie que le premier paramètre passé est bien une
instance de im_class (unbound method). En bref, c'est un exemple
d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement,
le premier en faisant en sorte que im_func soit appelée avec im_class au
lieu de im_self, le second en n'injectant aucun paramètre supplémentaire
(en fait, la méthode __get__ de staticmethod se contente de retourner
im_func telle que...)
En python, une méthode est une fonction qui prend l'objet comme premier paramètre.
<pédant> En Python, une méthode est un wrapper autour d'une fonction, lequel wrapper appelle la fonction en lui passant l'objet comme premier paramètre. <pedant-plus-plus>en fait, c'est même un peu plus compliqué que ça </pedant-plus-plus> </pédant>
Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python fonctionne.
La class function implémente le protocole descripteur (le même qui sert pour les properties). Lorsqu'une fonction est un attribut d'une classe, le 'lookup' de cet attribut déclence l'appel du protocol descripteur de la fonction (methode __get__(obj, type) de la fonction), lequel retourne soit une bound method (si obj != None), soit une unbound method (si obj == None) - dans les deux cas, une instance de la classe instancemethod (la différence étant que dans le premier cas l'attribut im_self de l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la fonction (attribut im_func), l'objet (im_self) et la class (im_class), et, lors de l'appel, soit injecte im_self comme premier paramètre (bond method), soit vérifie que le premier paramètre passé est bien une instance de im_class (unbound method). En bref, c'est un exemple d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement, le premier en faisant en sorte que im_func soit appelée avec im_class au lieu de im_self, le second en n'injectant aucun paramètre supplémentaire (en fait, la méthode __get__ de staticmethod se contente de retourner im_func telle que...)
HTH
jm
Bonsoir Amaury et Bruno,
Merci pour votre aide.
JM.
Bonsoir,
Je souhaite passer une fonction de string en paramêtre (islower, isupper, ...); je n'y arrive pas ...
déja essayé :
param_func = str.islower
mais "string".param_func() donne l'erreur
AttributeError: 'str' object has no attribute 'param_func'
En python, une méthode est une fonction qui prend l'objet comme premi er paramètre.
<pédant> En Python, une méthode est un wrapper autour d'une fonction, lequel wrapper appelle la fonction en lui passant l'objet comme premier paramètre. <pedant-plus-plus>en fait, c'est même un peu plus compliqu é que ça </pedant-plus-plus> </pédant>
Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python fonctionne.
La class function implémente le protocole descripteur (le même qui se rt pour les properties). Lorsqu'une fonction est un attribut d'une classe, le 'lookup' de cet attribut déclence l'appel du protocol descripteur de la fonction (methode __get__(obj, type) de la fonction), lequel retourne soit une bound method (si obj != None), soit une unbound method (si obj == None) - dans les deux cas, une instance de la classe instancemethod (la différence étant que dans le premier cas l'attribut im_self de l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la fonction (attribut im_func), l'objet (im_self) et la class (im_class), et, lors de l'appel, soit injecte im_self comme premier paramètre (bond method), soit vérifie que le premier paramètre passé est bien une instance de im_class (unbound method). En bref, c'est un exemple d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement, le premier en faisant en sorte que im_func soit appelée avec im_class au lieu de im_self, le second en n'injectant aucun paramètre supplémenta ire (en fait, la méthode __get__ de staticmethod se contente de retourner im_func telle que...)
HTH
Bonsoir Amaury et Bruno,
Merci pour votre aide.
JM.
Bonsoir,
Je souhaite passer une fonction de string en paramêtre (islower,
isupper, ...); je n'y arrive pas ...
déja essayé :
param_func = str.islower
mais "string".param_func() donne l'erreur
AttributeError: 'str' object has no attribute 'param_func'
En python, une méthode est une fonction qui prend l'objet comme premi er
paramètre.
<pédant>
En Python, une méthode est un wrapper autour d'une fonction, lequel
wrapper appelle la fonction en lui passant l'objet comme premier
paramètre. <pedant-plus-plus>en fait, c'est même un peu plus compliqu é
que ça </pedant-plus-plus>
</pédant>
Certains considèrent que la notation "appel de méthode"
x.islower()
n'est qu'un raccourci pour
type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python
fonctionne.
La class function implémente le protocole descripteur (le même qui se rt
pour les properties). Lorsqu'une fonction est un attribut d'une classe,
le 'lookup' de cet attribut déclence l'appel du protocol descripteur de
la fonction (methode __get__(obj, type) de la fonction), lequel retourne
soit une bound method (si obj != None), soit une unbound method (si obj
== None) - dans les deux cas, une instance de la classe instancemethod
(la différence étant que dans le premier cas l'attribut im_self de
l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la
fonction (attribut im_func), l'objet (im_self) et la class (im_class),
et, lors de l'appel, soit injecte im_self comme premier paramètre (bond
method), soit vérifie que le premier paramètre passé est bien une
instance de im_class (unbound method). En bref, c'est un exemple
d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement,
le premier en faisant en sorte que im_func soit appelée avec im_class au
lieu de im_self, le second en n'injectant aucun paramètre supplémenta ire
(en fait, la méthode __get__ de staticmethod se contente de retourner
im_func telle que...)
En python, une méthode est une fonction qui prend l'objet comme premi er paramètre.
<pédant> En Python, une méthode est un wrapper autour d'une fonction, lequel wrapper appelle la fonction en lui passant l'objet comme premier paramètre. <pedant-plus-plus>en fait, c'est même un peu plus compliqu é que ça </pedant-plus-plus> </pédant>
Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python fonctionne.
La class function implémente le protocole descripteur (le même qui se rt pour les properties). Lorsqu'une fonction est un attribut d'une classe, le 'lookup' de cet attribut déclence l'appel du protocol descripteur de la fonction (methode __get__(obj, type) de la fonction), lequel retourne soit une bound method (si obj != None), soit une unbound method (si obj == None) - dans les deux cas, une instance de la classe instancemethod (la différence étant que dans le premier cas l'attribut im_self de l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la fonction (attribut im_func), l'objet (im_self) et la class (im_class), et, lors de l'appel, soit injecte im_self comme premier paramètre (bond method), soit vérifie que le premier paramètre passé est bien une instance de im_class (unbound method). En bref, c'est un exemple d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement, le premier en faisant en sorte que im_func soit appelée avec im_class au lieu de im_self, le second en n'injectant aucun paramètre supplémenta ire (en fait, la méthode __get__ de staticmethod se contente de retourner im_func telle que...)
HTH
Amaury Forgeot d'Arc
Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python fonctionne.
La class function implémente le protocole descripteur (le même qui sert pour les properties). Lorsqu'une fonction est un attribut d'une classe, le 'lookup' de cet attribut déclence l'appel du protocol descripteur de la fonction (methode __get__(obj, type) de la fonction), lequel retourne soit une bound method (si obj != None), soit une unbound method (si obj == None) - dans les deux cas, une instance de la classe instancemethod (la différence étant que dans le premier cas l'attribut im_self de l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la fonction (attribut im_func), l'objet (im_self) et la class (im_class), et, lors de l'appel, soit injecte im_self comme premier paramètre (bond method), soit vérifie que le premier paramètre passé est bien une instance de im_class (unbound method). En bref, c'est un exemple d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement, le premier en faisant en sorte que im_func soit appelée avec im_class au lieu de im_self, le second en n'injectant aucun paramètre supplémentaire (en fait, la méthode __get__ de staticmethod se contente de retourner im_func telle que...)
C'est malheureusement l'exacte description du fonctionnement de python. Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux ignorer dans un premier temps...
-- Amaury
Certains considèrent que la notation "appel de méthode"
x.islower()
n'est qu'un raccourci pour
type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python
fonctionne.
La class function implémente le protocole descripteur (le même qui sert
pour les properties). Lorsqu'une fonction est un attribut d'une classe,
le 'lookup' de cet attribut déclence l'appel du protocol descripteur de
la fonction (methode __get__(obj, type) de la fonction), lequel retourne
soit une bound method (si obj != None), soit une unbound method (si obj
== None) - dans les deux cas, une instance de la classe instancemethod
(la différence étant que dans le premier cas l'attribut im_self de
l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la
fonction (attribut im_func), l'objet (im_self) et la class (im_class),
et, lors de l'appel, soit injecte im_self comme premier paramètre (bond
method), soit vérifie que le premier paramètre passé est bien une
instance de im_class (unbound method). En bref, c'est un exemple
d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement,
le premier en faisant en sorte que im_func soit appelée avec im_class au
lieu de im_self, le second en n'injectant aucun paramètre supplémentaire
(en fait, la méthode __get__ de staticmethod se contente de retourner
im_func telle que...)
C'est malheureusement l'exacte description du fonctionnement de python.
Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux
ignorer dans un premier temps...
Certains considèrent que la notation "appel de méthode" x.islower() n'est qu'un raccourci pour type(x).islower(x)
Ce n'est pas une "considération", c'est effectivement ainsi que Python fonctionne.
La class function implémente le protocole descripteur (le même qui sert pour les properties). Lorsqu'une fonction est un attribut d'une classe, le 'lookup' de cet attribut déclence l'appel du protocol descripteur de la fonction (methode __get__(obj, type) de la fonction), lequel retourne soit une bound method (si obj != None), soit une unbound method (si obj == None) - dans les deux cas, une instance de la classe instancemethod (la différence étant que dans le premier cas l'attribut im_self de l'objet instancemethod est obj, dans le second il est None).
Cet objet instancemethod est un callable qui garde des références sur la fonction (attribut im_func), l'objet (im_self) et la class (im_class), et, lors de l'appel, soit injecte im_self comme premier paramètre (bond method), soit vérifie que le premier paramètre passé est bien une instance de im_class (unbound method). En bref, c'est un exemple d'application partielle...
Les décorateurs classmethod et staticmethod modifient ce comportement, le premier en faisant en sorte que im_func soit appelée avec im_class au lieu de im_self, le second en n'injectant aucun paramètre supplémentaire (en fait, la méthode __get__ de staticmethod se contente de retourner im_func telle que...)
C'est malheureusement l'exacte description du fonctionnement de python. Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux ignorer dans un premier temps...
-- Amaury
Bruno Desthuilliers
Amaury Forgeot d'Arc wrote:
(snip détails sur le mécanismes fonctions/méthodes)
C'est malheureusement l'exacte description du fonctionnement de python. Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux ignorer dans un premier temps...
Pourquoi donc ? Je veux dire : ce n'est effectivement peut-être pas la première chose à expliquer à un programmeur débutant, mais par ailleurs c'est aussi à ce genre de mécanismes - et au fait qu'on puisse prendre la main dessus - que Python doit sa puissance. Ce serait dommage de passer à côté, non ?
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Amaury Forgeot d'Arc wrote:
(snip détails sur le mécanismes fonctions/méthodes)
C'est malheureusement l'exacte description du fonctionnement de python.
Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux
ignorer dans un premier temps...
Pourquoi donc ? Je veux dire : ce n'est effectivement peut-être pas la
première chose à expliquer à un programmeur débutant, mais par ailleurs
c'est aussi à ce genre de mécanismes - et au fait qu'on puisse prendre
la main dessus - que Python doit sa puissance. Ce serait dommage de
passer à côté, non ?
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in 'onurb@xiludom.gro'.split('@')])"
(snip détails sur le mécanismes fonctions/méthodes)
C'est malheureusement l'exacte description du fonctionnement de python. Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux ignorer dans un premier temps...
Pourquoi donc ? Je veux dire : ce n'est effectivement peut-être pas la première chose à expliquer à un programmeur débutant, mais par ailleurs c'est aussi à ce genre de mécanismes - et au fait qu'on puisse prendre la main dessus - que Python doit sa puissance. Ce serait dommage de passer à côté, non ?
-- bruno desthuilliers python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for p in ''.split('@')])"
Amaury Forgeot d'Arc
Amaury Forgeot d'Arc wrote: (snip détails sur le mécanismes fonctions/méthodes)
C'est malheureusement l'exacte description du fonctionnement de python. Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux ignorer dans un premier temps...
Pourquoi donc ? Je veux dire : ce n'est effectivement peut-être pas la première chose à expliquer à un programmeur débutant, mais par ailleurs c'est aussi à ce genre de mécanismes - et au fait qu'on puisse prendre la main dessus - que Python doit sa puissance. Ce serait dommage de passer à côté, non ?
Tu prêches un convaincu...
-- Amaury
Amaury Forgeot d'Arc wrote:
(snip détails sur le mécanismes fonctions/méthodes)
C'est malheureusement l'exacte description du fonctionnement de python.
Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux
ignorer dans un premier temps...
Pourquoi donc ? Je veux dire : ce n'est effectivement peut-être pas la
première chose à expliquer à un programmeur débutant, mais par ailleurs
c'est aussi à ce genre de mécanismes - et au fait qu'on puisse prendre
la main dessus - que Python doit sa puissance. Ce serait dommage de
passer à côté, non ?
Amaury Forgeot d'Arc wrote: (snip détails sur le mécanismes fonctions/méthodes)
C'est malheureusement l'exacte description du fonctionnement de python. Je dis "malheureusement", parce qu'il y a des choses qu'il vaut mieux ignorer dans un premier temps...
Pourquoi donc ? Je veux dire : ce n'est effectivement peut-être pas la première chose à expliquer à un programmeur débutant, mais par ailleurs c'est aussi à ce genre de mécanismes - et au fait qu'on puisse prendre la main dessus - que Python doit sa puissance. Ce serait dommage de passer à côté, non ?