python类成员函数加一个装饰器总是失败

#!/usr/bin/python
import sys,os,time,subprocess,thread,json
import traceback
import sys
from xmlrpclib import ServerProxy


def xmlrpc_call(func):
    def _deco(*args, **kwargs):
        self = args[0]
        server_url = "http://%s:%s" % (self.host, self.port)
        s = ServerProxy(server_url)
        ret = None
        try:
            ret = getattr(s, func.__name__)(*args, **kwargs)
        except Exception,e:
            raise
        return ret
    return _deco


class Command(object):
    def __init__(self, host, port=10000):
        self.host = host
        self.port = port

    @xmlrpc_call()
    def create(self, data):
        pass



if __name__ == "__main__":
    cmd = Command('127.0.0.1', 10000)
    cmd.create({})

执行时总是报这个错误:

Traceback (most recent call last):
File "./test.py", line 27, in <module>

class Command(object):

File "./test.py", line 32, inCommand

@xmlrpc_call()

TypeError: xmlrpc_call() takes exactly 1 argument (0 given)

阅读 3.9k
1 个回答
  1. 参数问题
  2. 装饰器调用问题

def debug(func):
    def _deco(*args, **kwargs):
        print("[DEBUG]: enter {}()".format(func.__name__))
        self = args[0]
        server_url = "http://%s:%s" % (self.host, self.port)
        print(server_url)
        return server_url
    return _deco



class Command(object):
    def __init__(self, host, port=10000):
        self.host = host
        self.port = port

    @debug
    def create(self, data):
        pass


if __name__ == '__main__':
    cmd = Command("1", 1)
    # create("1","2")
    cmd.create({})

执行结果

[DEBUG]: enter create()
http://1:1
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题