Как использовать функцию класса в качестве декоратора, который сам принимает параметр в python?
Я попробовал этот фрагмент в качестве эксперимента, как декораторы могут быть использованы в различных сценариях, здесь без переменной весь код работает, но когда я добавляю аргумент в функцию декоратора, появляется сообщение об ошибке.
class dec(object):
def __init__(self, str1, str2):
self.str1 = str1
self.str2 = str2
print(f"printing from init via ----- str1={self.str1} , str2={self.str2}")
def onef(self,f,s):
print(f"printing from init via onef ----- str1={self.str1} , str2={self.str2}")
print("onef --------- up")
f()
print(f"printing s = {s}")
print("onef --------- down")
d=dec(str1='Hey',str2='hi')
@d.onef(s='in onef ok !')
def f():
print("The F --- function")
сообщение об ошибке
printing from init via ----- str1=Hey , str2=hi
Traceback (most recent call last):
File "C:\Users\Anuj\Desktop\decorators.py", line 16, in <module>
@d.onef(s='in onef ok !')
TypeError: dec.onef() missing 1 required positional argument: 'f'
Ранее пробовал этот.
class dec(object):
def __init__(self, str1, str2):
self.str1 = str1
self.str2 = str2
print(f"printing from init via ----- str1={self.str1} , str2={self.str2}")
def onef(self,f):
print(f"printing from init via onef ----- str1={self.str1} , str2={self.str2}")
print("onef --------- up")
f()
print("onef --------- down")
d=dec(str1='Hey',str2='hi')
@d.onef
def f():
print("The F --- function")
Это сработало. Ответ
printing from init via ----- str1=Hey , str2=hi
printing from init via onef ----- str1=Hey , str2=hi
onef --------- up
The F --- function
onef --------- down