【问题标题】:XMLRPC server functions wrapperXMLRPC 服务器函数包装器
【发布时间】:2014-05-19 13:41:47
【问题描述】:

我正在尝试包装我的 xml-rpc 服务器 (python 2.7) 我正在使用post中的代码

这是我的代码:

class XMLRPCWrapperProxy(object):
    def __init__(self, wrapped=None):
        if wrapped is None:
            wrapped = xmlrpclib.ServerProxy('http://xxx.xxx.xxx.xxx:xxxx')
        self.tf = wrapped

    def __getattr__(self, name):
        print "before"
        attr = getattr(self.tf, name)
        print "after"
        return type(self)(attr)

    def __call__(self, *args, **kw):
        return self.tf(*args, **kw)

server_w = XMLRPCWrapperProxy()

server_w.tf.do_function1()
server_w.tf.do_function2(param1)
server_w.tf.do_function3()
server_w.tf.do_function4(param1)

我想wrap do_fuxntion... 调用,但由于某种原因我看不到打印语句,我想我正在包装 self.tf 而不是调用方法,知道如何扭曲任何方法调用吗?

【问题讨论】:

  • 投反对票的人,你能解释一下你的投反对票吗?

标签: python wrapper xml-rpc


【解决方案1】:

如果你想包装tf,为什么在你的测试中调用server_w.tf? 这使得包装变得毫无意义。

如果您尝试server_w.do_function1(),您将看到打印语句。 我不明白你想用type(self)(attr)line 实现什么...

我会像这样尝试__getattr__

def __getattr__(self, name):
    print "before"
    attr = getattr(self.tf, name)
    print "after"
    return attr

这应该正确地返回包装对象的功能。

【讨论】:

  • 我认为type(self)(attr) 旨在自动包装来自方法调用的任何返回值。 (编辑:不,如果我更仔细地看,这并不完全有意义......)
【解决方案2】:

这可能相当明显,但您看不到打印语句,因为从未调用过__getattr__ 方法。如果我正确理解意图,我怀疑您的电话应该省略.tf 部分。因此它应该是:

# ...
server_w.do_function1()
server_w.do_function2(param1)
server_w.do_function3()
server_w.do_function4(param1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 2011-01-13
    • 2011-01-12
    • 2013-06-22
    • 2013-02-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多