Если некая функция foo() задекорирована функцией bar()
@bar
def foo()
do_something
Есть ли возможность в дальнейшем коде задействовать foo() без декорации?
def foo()
do_something
foobar = bar(foo)
PooHВаш код очевиден, я имел в виду именно декоратор, можно ли его как то “отменить”?foo - чистая, foobar - декорированнаяdef foo()
do_something
foobar = bar(foo)
def A(x):
return x()
@A
def B():
return "Некое значение"
print B
B=A(B)
FishHookНу да. Вы чего-то странного хотите. Если декоратор ваш, то можно сделать исходную функцию атрибутом декорированной. Больше в голову ничего не приходит. А можно вопрос? Зачем?
Ваш код очевиден
def foo()
do_something
foo = bar(foo)
bazookaДело в том, что применяя декоратор, я надеюсь получить более компактный и читаемый код.
декоратор это просто синтаксический сахар длятам нет никакой магииdef foo()
do_something
foo = bar(foo)
FishHookпочему же нельзя, можно :)
ПС: я уже понял, что нельзя
>>> def s(f):
... def inner(*a,**w):
... return str(f(*a,**w))
... return inner
...
>>> @s
... def f(x=1):
... return x
...
>>> f()
'1'
>>> f(19)
'19'
>>> f.func_closure[0].cell_contents()
1
>>> f.func_closure[0].cell_contents(19)
19
zheromoСпасибо, это то, о чем я спрашивалFishHookпочему же нельзя, можно :)
ПС: я уже понял, что нельзя>>> def s(f):
... def inner(*a,**w):
... return str(f(*a,**w))
... return inner
...
>>> @s
... def f(x=1):
... return x
...
>>> f()
'1'
>>> f(19)
'19'
>>> f.func_closure[0].cell_contents()
1
>>> f.func_closure[0].cell_contents(19)
19
>>> def s(f):
def inner(*a, **kw):
return 4
return inner
>>> @s
def f(x=1):
return x
>>> f()
4
>>> f(19)
4
>>> f.func_closure[0].cell_contents()
Traceback (most recent call last):
File "<pyshell#14>", line 1, in <module>
f.func_closure[0].cell_contents()
TypeError: 'NoneType' object is not subscriptable
>>> f.func_closure[0].cell_contents(19)
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
f.func_closure[0].cell_contents(19)
TypeError: 'NoneType' object is not subscriptable