Я создаю SocketServer, который должен иметь возможность обрабатывать множество команд. Поэтому, чтобы мой RequestHandler не становился слишком длинным, он будет вызывать разные функции, зависящие от команды. Моя дилемма заключается в том, как заставить его отправлять информацию обратно клиенту.Неправильное использование
В настоящее время я делаю функции «урожай» всего, что он хочет отправить обратно клиенту. Но я думаю, что это, вероятно, не пифонический путь.
# RequestHandler
func = __commands__.get(command, unkown_command)
for message in func():
self.send(message)
# example_func
def example():
yield 'ip: {}'.format(ip)
yield 'count: {}'.format(count)
. . .
for ping in pinger(ip,count):
yield ping
Это уродливое использование урожая? Только укрепляющий я могу думать, если когда RequestHandler вызывает функцию это проходит себя в качестве аргумента
func(self)
, а затем в функции
def example(handler):
. . .
handler.send('ip: {}'.format(ip))
Но этот способ не чувствовать себя намного лучше.
Вы также можете использовать лямбда. Необходимо облегчить тестирование. – Sorin
@Sorin Вы имеете в виду что-то вроде: func (lambda x: self.send (x))? – Lufftre
Оба решения технически правильны, оба одинаково проверяемы ... Первый полностью отделяет функции от обработчика (что прекрасно, если ни одна из ваших функций никогда не должна знать что-либо из обработчика), вторая - самая очевидная для новичков Python - так вы можете сделать это на языке без генераторов. –