Можно ли передать декорированный метод с аргументами __init__
декоратора?
Простой декоратор и пример использования
class Decorator(object):
def __init__(self, *args):
print args
def __call__(self, func): # yep the method still have to be callable
return func
@Decorator
def foo():
pass
Декоратор без аргументов передаст метод в качестве аргумента
$ python foo.py
(<function foo at 0x7fefd7ac1b90>,)
Когда я добавляю аргументы в декоратор
@Decorator(1, 2, 3)
def foo():
pass
это приводит к
$ python test.py
(1, 2, 3)
Как видите, метод теперь отсутствует в переданных аргументах.
Decorator
каждый раз, когда применяется декоратор? 28.03.2014args
в нашем классе. Если мы переместим класс за пределы функции, то класс не сможет получить доступ кargs
. 28.03.2014args
аргументы для класса__init__
и не вернете экземпляр, что здесь имеет больше смысла... 28.03.2014__call__
вместо того, чтобы исправить его. 28.03.2014decorator_creator
, он вызовет метод__call__
этого экземпляра во время самого создания функции. 28.03.2014