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