2016-08-06 5 views
0

Я пытаюсь получить мой декоратор работает, но я получаю вернулся сдекоратор не работает правильно

TypeError: command() takes 1 positional argument but 2 were given 

Я не уверен, что происходит, кто-то может объяснить мне, что я делаю неправильно?

Decorator Код

def command(command): 
    def method(self, *args, **kwargs): 
     return command(self, *args, **kwargs) 
    return method 

Функция с помощью декоратора

@bot.command 
async def speak(msg : str): 
    await bot.say(msg) 

Демонстрация

Я хотел бы иметь бота, который будет реагировать на команды на спусковой крючок ,

Например, я пришлю сообщение чата:

?eval 1 * 2 

который бот будет отвечать с

2 

Используя @bot.command, я буду иметь возможность создавать гибкую систему который сообщает приложению, что эта функция является функцией триггера.

например

@bot.command 
async def eval(self, *args) 
    await bot.send(eval(*args)) 
+4

Пожалуйста, дайте [mcve] - что такое '' бот', например? Где остальная трассировка? – jonrsharpe

+0

Я покажу вам что-то, что демонстрирует то, что я пытаюсь сделать. @jonrsharpe –

+4

Это редактирование вообще не помогает. Перечитайте статью связанного справочного центра и укажите что-то, что ** действительно помогает воссоздать проблему **. В идеале мы должны иметь возможность вырезать и вставлять что-то, выполнять его и видеть точно такой же результат. – jonrsharpe

ответ

0

Вы украшаете с bot.command.

Если bot является объектом, то bot.command представляет собой метод и вызывается с параметром self до command аргумента, следовательно, «2 были даны».

+0

Так что ты тогда говоришь? Должен ли я добавлять или удалять 'self' в' command() 'function? –

+0

@ stat.us ну почему 'bot.command' метод экземпляра? Он не использует никакого состояния 'self', почему бы не сделать его' @ staticmethod' (или вообще удалить его из класса)? Или это 'бот' модуль? – jonrsharpe

+0

Потому что я хотел построить класс декоратора для моего босса Discord, поэтому я хочу, чтобы мой код был чистым. –

Смежные вопросы