0

在 jsonrpclib 文档中,示例是一个一个地注册函数,如下所示:

def foo():
    pass

def bar():
    pass

server = SimpleJSONRPCServer(("localhost", 8000))
server.register_multicall_functions()
server.register_function(foo, 'foo')
server.register_function(bar, 'bar')

它可以工作但不是pythonic。一个一个的注册函数毕竟是错综复杂的。

是否有一些示例可以一次以类或其他 python 方式注册函数。如:

class Api(object):
    def foo():
        pass

    def bar():
        pass

def SomeMagic():
    # register all function in Api
    server.register_function(Api)
4

1 回答 1

0

我想到了一个主意。最重要的是 dir() 内置函数。

# api.py
def foo():
    pass

def bar():
    pass


# main.py
import api

def register_api(server, api_obj):
    methods = dir(api_obj)
    apis = filter(lambda m: not m.startswith('_'), methods)
    [server.register_function(getattr(api_obj, api)) for api in apis]

def main():
    endpoint = (LISTEN_ADDR, LISTEN_PORT) 
    server = SimpleJSONRPCServer(endpoint)
    register_api(server, api)
    server.serve_forever()
于 2015-12-25T02:34:46.180 回答