Outils pour utilisateurs

Outils du site


python:decorateurs

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
python:decorateurs [2012/04/27 18:17] rootpython:decorateurs [2017/03/22 21:06] (Version actuelle) – [Built-in decorator] root
Ligne 6: Ligne 6:
   * **@property** : transforme une fonction en propriété (en gros transforme une fonctionne comme une variable)   * **@property** : transforme une fonction en propriété (en gros transforme une fonctionne comme une variable)
  
-<code>+<code python>
 class C(object): class C(object):
     def __init__(self):     def __init__(self):
Ligne 23: Ligne 23:
     def x(self):     def x(self):
         del self._x         del self._x
 +</code>
 +
 +<code python>
 +#!/usr/bin/env python3
 +# -*- coding: utf-8 -*-
 +
 +class myclass(object):
 +    x = 0
 +
 +    def __init__(self):
 +        print('init')
 +        self.x = 0
 +
 +    # Methode classique. Ne peux pas être appelée sans être instanciée
 +    # myclass().foo(1)
 +    # myclass.foo(1) >>> Erreur
 +    def foo(self, x):
 +        print("Executing foo ({} : {})".format(self, x))
 +        self.x+=x
 +
 +    # Pas besoin d'instancier la classe pour l'appeler. A accès aux attributs de la classe qui ne commencent pas par self. A accès aux méthodes qui ne sont pas instanciées (c'est à dire aux methodes qui n'ont pas de self => @classmethod et @staticmethod).
 +    # myclass().class_foo(1) >>> Appelle __init__ car on a instancié la classe
 +    # myclass.class_foo(1)
 +    @classmethod
 +    def class_foo(cls, x):
 +        print("Executing class_foo ({} : {})".format(cls, x))
 +        cls.x+=x
 +        cls.static_foo(1)
 +
 +    # Pas besoin d'instancier la classe pour l'appeler. Vu comme une simple fonction. N'a pas accès aux méthodes
 +    # myclass().static_foo(1) >>> Appelle __init__ car on a instancié la classe
 +    # myclass.static_foo(1)
 +    @staticmethod
 +    def static_foo(x):
 +        print("Executing static_foo ({})".format(x))
 +        x+=1
 +
 +if __name__ == '__main__':
 +    a=myclass()
 +    print('x = {}'.format(a.x))
 +    a.foo(1)
 +    print('x = {}'.format(a.x))
 +    a.class_foo(1)
 +    print('x = {}'.format(a.x))
 +    a.static_foo(1)
 +    print('x = {}'.format(a.x))
 +    print('*'*10)
 +    try:
 +        myclass.foo(1)
 +    except Exception as e:
 +        print(e)
 +    myclass.class_foo(1)
 +    myclass.static_foo(1)
 </code> </code>
  
 ===== Sans arguments ===== ===== Sans arguments =====
  
-<code>+<code python>
 def decorate(func): def decorate(func):
     def wrapper(*args, **kwargs):     def wrapper(*args, **kwargs):
Ligne 34: Ligne 87:
         # Post-traitement         # Post-traitement
         return response         return response
 +    wrapper.__doc__ = func.__doc__
 +    wrapper.__name__ = func.__name__
     return wrapper     return wrapper
 </code> </code>
  
 Exemple :  Exemple : 
-<code>+<code python>
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
Ligne 66: Ligne 121:
 ===== Avec arguments ===== ===== Avec arguments =====
  
-<code>+<code python>
 def decorate(arg1, arg2, arg3):     def decorate(arg1, arg2, arg3):    
     def decorated(func):     def decorated(func):
Ligne 78: Ligne 133:
 </code> </code>
  
-<code>+<code python>
 def decorate(arg1='default', arg2=None, arg3=None):     def decorate(arg1='default', arg2=None, arg3=None):    
     def decorated(func):     def decorated(func):
Ligne 94: Ligne 149:
 </code> </code>
  
-<code>+<code python>
 # MAUVAIS # MAUVAIS
 @decorate @decorate
Ligne 107: Ligne 162:
  
 Exemple :  Exemple : 
-<code>+<code python>
 # -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
  
python/decorateurs.1335550655.txt.gz · Dernière modification : 2012/04/27 18:17 de root