Я пишу API/сервер python, чтобы позволить внешнему устройству (микроконтроллеру) удаленно вызывать методы объекта, отправив строку с именем метода. Эти методы будут храниться в словаре. например :Python, выполнение дополнительного кода при определении метода
class Server:
...
functions = {}
def register(self, func):
self.functions[func.__name__] = func
def call(self, func_name, args):
self.functions[func_name](*args)
...
Я знаю, что я мог бы определить функции внешне определения класса и зарегистрировать их вручную, но я бы очень хотел, что шаг регистрации будет сделан автоматически. Рассмотрим следующий класс:
class MyServer(Server):
...
def add(self,a,b):
print a+b
def sub(self,a,b):
print a-b
...
Это будет работать путем подкласса класса сервера и определения методов для вызова. Как я могу заставить методы автоматически регистрироваться в словаре функций?
Один из способов, которым я думал, что это можно сделать, - это метакласс, который смотрит на шаблон в имени методов, добавляя, если совпадение найдено, добавьте эти методы в словарь функций. Кажется, излишним ...
Можно ли украсить методы для регистрации? Может ли кто-нибудь дать мне подсказку для простейшего решения этой проблемы?
Ваше решение для метакласса также может быть выполнено с помощью декоратора класса. Декоратор методов не сможет ничего хранить в классе, потому что класс не существует в то время, когда работает декодер метода. – BrenBarn
@BrenBarn Существует [решение этой проблемы] (https://github.com/Lattyware/recap). –
@ Lattyware: Конечно, я просто говорю, что вам понадобятся некоторые механизмы, кроме декоратора, по методам. – BrenBarn