Здравствуйте, решил короче изучить целери и сразу увидел интересную особенность, которую не понимаю.
import celery
app = celery.Celery()
@app.tasks
def a(b: int):
return 1234
a.delay()
а - просто функция, откуда у нее появился метод delay()? Понятно что в декораторе происходит какая то магия. В исходниках очень сложно, не смог разобраться где именно происходит чудо. Самостоятельные попытки к успеху не привели, может кто подскажет как такое работает?
Попытка
class FunctionClass:
def __init__(self, func=None):
self.func = func
def __call__(self, *args, **kwargs):
return self.func(*args, **kwargs)
def delay(self):
return 1
def funcToClass(func):
def wrap(*args, **kwargs):
global func
temp = func
func = FunctionClass(temp)
func.secret = "CAT"
return func(*args, **kwargs)
return wrap
@funcToClass
def test(a: int):
return a + 1
print(test.delay()) - тут всё равно ошибка