[python] fonction=class(fonction)
blackevil
Messages postés
1
Statut
Membre
-
kilian Messages postés 8854 Statut Modérateur -
kilian Messages postés 8854 Statut Modérateur -
Bonjour, je suis en master informatique et mon prof d'outils web nous a demander de faire un framework en python, le seul probleme, c'est qu'on a (pratiquement) jamais touché a python, donc j'aurais quelques question, si il vous manque des precisions hésiter pas
Le prof nous a donné un exemple sur la gestion des cookies.
voila un exemple que l'utilisateur du framework fait lui meme pour la gestion des cookies. Voila la classe cookies:
Pour l'instant j'aimerai juste savoir que fait exactement gateau=Cookies(gateau) je pense qu'il appelle la fonction callable __call__mais je comprend pas comment on peu mettre une fonction en parametre(enfin si en c/java mais la je comprend pas) et surtout que veuc dire fonction=class(fonction)
Ps: Euu en python =>2.4 je croit que gateau=Cookies(gateau) peux etre mis grace un decorateur avant la fonction grace à @Cookies
Mais sa m'aide pas je voie toujours pas ce que sa veux dire
Le prof nous a donné un exemple sur la gestion des cookies.
def gateau(environ,start_response):
try:
n=int(environ['obiwan.cookie'].get('n').value)
except:
n=0 environ['obiwan.cookie.out']['n']=str(n+1)
return render(start_response,'cook.html',{'n':n})
gateau=Cookies(gateau)
voila un exemple que l'utilisateur du framework fait lui meme pour la gestion des cookies. Voila la classe cookies:
from Cookie import SimpleCookie
import os
class Cookies(object):
def __init__(self,app):
self.app=app
def __call__(self,environ,start_response):
c=SimpleCookie()
c.load(environ.get('HTTP_COOKIE',''))
environ['obiwan.cookie']=c
self.out=SimpleCookie()
environ['obiwan.cookie.out']=self.out
self.orig_start=start_response
return self.app(environ,self.start_response)
def start_response(self,s,headers):
for i in self.out:
headers.append(('Set-Cookie',self.out[i].OutputString()))
return self.orig_start(s,headers)
Pour l'instant j'aimerai juste savoir que fait exactement gateau=Cookies(gateau) je pense qu'il appelle la fonction callable __call__mais je comprend pas comment on peu mettre une fonction en parametre(enfin si en c/java mais la je comprend pas) et surtout que veuc dire fonction=class(fonction)
Ps: Euu en python =>2.4 je croit que gateau=Cookies(gateau) peux etre mis grace un decorateur avant la fonction grace à @Cookies
Mais sa m'aide pas je voie toujours pas ce que sa veux dire
A voir également:
- [python] fonction=class(fonction)
- Fonction si et - Guide
- Fonction miroir - Guide
- Fonction moyenne excel - Guide
- Fonction remplacer sur word - Guide
- Fonction somme excel - Guide
1 réponse
Salut,
La methode __call__ permet de surcharger l'opérateur "()" (l'appel de fonction).
Donc si tu fais ça:
#Affiche je suis un objet....
Donc en faisant ça:
gateau devient un objet Cookies qui peut être appelé comme une fonction.
Mais self.app de l'objet gateau prend l'ancienne valeur de gateau (soit la première fonction gateau).
Du coup si tu regardes __call__, l'objet gateau va retourner self.app(environ,self.start_response), soit ce que la première fonction gateau aurait retourné, sachant que la variable environ a été modifiée dans __call__ (entre autres...)....
La methode __call__ permet de surcharger l'opérateur "()" (l'appel de fonction).
Donc si tu fais ça:
class Machin:
def __call__(self, arg1):
print arg1
obj = Machin()
obj("je suis un objet qui peut être appelé comme une fonction")
#Affiche je suis un objet....
Donc en faisant ça:
gateau=Cookies(gateau)
gateau devient un objet Cookies qui peut être appelé comme une fonction.
Mais self.app de l'objet gateau prend l'ancienne valeur de gateau (soit la première fonction gateau).
Du coup si tu regardes __call__, l'objet gateau va retourner self.app(environ,self.start_response), soit ce que la première fonction gateau aurait retourné, sachant que la variable environ a été modifiée dans __call__ (entre autres...)....