Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 23, 2016 14:35:22

rascally_rabbit
Зарегистрирован: 2016-09-22
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

декоратор

 from functools import wraps
def add_msg(start_msg, end_msg):
	def some_decorator(func):
		@wraps(func)
		def result(*args, **kwargs):
			print(start_msg, func.__name__)
			func(*args, **kwargs)
			print(end_msg, func.__name__)
		return result
	return some_decorator
@add_msg("старт функции", "завершение функции")
def test(a, b):
	print(a * b)
test(2, 5)

Правда не совсем понял, почему меняется атрибут __name__ декорируемой функции.

Отредактировано rascally_rabbit (Сен. 23, 2016 15:06:49)

Офлайн

#2 Сен. 23, 2016 17:27:16

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

декоратор

Что-то делаете не так, наверное
И __name__ и __doc__ должны остаться как есть…

Офлайн

#3 Сен. 23, 2016 18:12:58

rascally_rabbit
Зарегистрирован: 2016-09-22
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

декоратор

Прошу прощение, неправильно выразился.
В первом варианте менятеся, без врапера.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version