0

jsonrpclib docs では、例は次のように関数を 1 つずつ登録します。

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 ではありません。いちいち関数を登録するのは、やっぱり面倒ですよね。

関数をクラスまたは他のpythonicな方法で一度に登録する例はいくつかありますか? そのような:

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 に答える