XMLRPC服务器函数wrapp

2024-06-28 11:06:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试包装我的XMLRPC服务器(Python2.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...打电话,但由于某些原因,我看不到打印语句,我想我正在包装自我.tf而不是调用方法,你知道我如何扭曲任何方法调用吗?你知道吗


Tags: nameselfnonereturnservertfdefargs
2条回答

如果要包装tf,为什么在测试中调用server_w.tf? 这让包装变得毫无意义。你知道吗

如果您尝试server_w.do_function1(),您将看到print语句。 我不明白你想用type(self)(attr)行实现什么。。。你知道吗

我试着__getattr__简单地说:

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

这应该正确地返回包装对象的函数。你知道吗

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

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

相关问题 更多 >