【发布时间】:2013-12-05 03:09:29
【问题描述】:
我正在编写一个 python API/服务器,以允许外部设备(微控制器)通过发送带有方法名称的字符串来远程调用对象的方法。这些方法将存储在字典中。例如:
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 有a solution to that issue。
-
@Lattyware:当然,我只是说除了方法上的装饰器之外,您还需要一些机器。
标签: python oop decorator metaclass