def decorator(f):
event_handlers[event].append(f)
return f
return decorator
хендлеры цепляются на методы класса и вызываются как-то так
async def dispatch(self, event):
handlers = event_handlers.get(event.event)
for handler in handlers:
await handler(self, event) # FIXME
пример хендлера
@event('Transfer')
async def on_transfer(self, transfer):
print(self, transfer) # FIXME
возможно ли как-то сделать чтобы их можно было цеплять и в других классах? как передать self? это вообще возможно или я странного хочу? как я понимаю при вызове декоратора класс еще не создан.
class Bot: def __init__(self): self.event_handlers = defaultdict(list) def event(self, event): def decorator(f): self.event_handlers[event].append(f) return f return decorator а потом bot = Bot() @bot.event("xxx") def smth(): ...
Я не понял о каком self тут идёт речь
Обсуждают сегодня