Page 49 - 6734
P. 49

return x*x
           temp=decorator('y=') # отримати аргумент і повернути
           функцію f
           function=temp(function) # обгорнути функцію
           print function(2) # виклик обгорнутої функції

           # те саме, але із застосуванням декоратора @decorator
           з аргументом
           @decorator('y=')
           def function(x): # функція, яка обгортається
               return x*x
           print function(2) # виклик обгорнутої функції

           y= 4
           y= 4
                                  Декоратори класу

               За  тим  самим  принципом  можна  обгортати  класи.  Приклад
           показує як за допомогою декоратора класу автоматично змінювати
           значення його атрибута __name__.

           def decorator(arg): # функція отримує аргумент і
           повертає внутрішню функцію f
               def f(cls): # внутрішня функція-обгортка отримує
           і повертає клас
                   cls.__name__=arg # змінити значення атрибута
           класу
                   return cls # повертає клас
               return f
           # застосування декоратора класу з аргументом
           @decorator('Мій клас')
           class A(object): # клас
               a=1
           print A.__name__

           Мій клас
                                          48
   44   45   46   47   48   49   50   51   52   53   54