123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- # -*- coding: utf-8 -*-
- # def my_decorator(function_to_decorate):
- # def the_wrapper_around_the_original_function():
- # print("Этот код работает до вызова функции")
- # function_to_decorate()
- # print("Этот код работает после вызова функции")
- # return the_wrapper_around_the_original_function
- # def stand_alone_function():
- # print("Эта функция не изменяется")
- # @my_decorator
- # def another_stand_alone_function():
- # print("Оставль меня в покое")
- # another_stand_alone_function()
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Передача аргументов в декорируемую функцию
- def a_decorator_passing_argument(function_to_decorate):
- def a_wrapper_accepting_arguments(arg1, arg2):
- print "Смотри, что я получил:", arg1, arg2
- function_to_decorate(arg1, arg2)
- return a_wrapper_accepting_arguments
- @a_decorator_passing_argument
- def print_full_name(first_name, last_name):
- print "Меня зовут", first_name, last_name
- # print_full_name("Питер", "Венкман")
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- # Декорирование методов
- def method_friendly_decorator(method_to_decorate):
- def wrapper(self, lie):
- return method_to_decorate(self, lie)
- return wrapper
- class Lucy(object):
- def __init__(self):
- self.age = 21
- @method_friendly_decorator
- def sayYourAge(self, lie):
- print 'Мне %s, а ты бы сколько дал?' % (self.age + lie)
- # l = Lucy()
- # l.sayYourAge(-3)
-
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def a_decorator_passing_arbitrary_arguments(function_to_decorate):
- def a_wrapper_accepting_arbitrary_arguments(*args, **kwargs):
- print "Передали ли мне что-нибудь?:"
- print args
- print kwargs
- function_to_decorate(*args, **kwargs)
- return a_wrapper_accepting_arbitrary_arguments
- @a_decorator_passing_arbitrary_arguments
- def function_with_no_argument():
- print "No argument here"
- # function_with_no_argument()
- @a_decorator_passing_arbitrary_arguments
- def function_with_arguments(a, b, c):
- print a, b, c
- # function_with_arguments(1, 2, 3)
- @a_decorator_passing_arbitrary_arguments
- def function_with_named_arguments(a, b, c, platypus="Почему нет?"):
- print "Любят ли %s, %s и %s утконосов? %s" % (a, b, c, platypus)
- # function_with_named_arguments("Билл", "Линус", "Стив", platypus="Определенно!")
- class Mary(object):
- def __init__(self):
- self.age = 31
- @a_decorator_passing_arbitrary_arguments
- def sayYourAge(self, lie=-3):
- print 'Мне %s, а ты бы сколько дал?' % (self.age + lie)
- # m = Mary()
- # m.sayYourAge()
- #~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- def decorator_maker_with_arguments(decorator_arg1, decorator_arg2):
- print "Я создаю декораторы! И я получил следующие аргументы:", decorator_arg1, decorator_arg2
- def my_decorator(func):
- print "Я - декоратор. И ты все же смог передать мне эти аргументы:", decorator_arg1, decorator_arg2
- def wrapped(function_arg1, function_arg2):
- print ("Я - обёртка вокруг декорируемой функции.\n"
- "И я имею доступ ко всем аргументам: \n"
- "\t- и декоратора: {0} {1}\n"
- "\t- и функции: {2} {3}\n"
- "Теперь я могу передать нужные аргументы дальше"
- .format(decorator_arg1, decorator_arg2, function_arg1, function_arg2))
- return func(function_arg1, function_arg2)
-
- return wrapped
-
- return my_decorator
- @decorator_maker_with_arguments("Леонард", "Шелдон")
- def decorated_function_with_arguments(function_arg1, function_arg2):
- print ("Я - декорируемая функция и я знаю только о своих аргументах: {0}"
- " {1}".format(function_arg1, function_arg2))
-
-
- decorated_function_with_arguments("Раджеш", "Говард")
|