python 魔术函数调用的实现
场景
实现一个python调用java接口的功能,java接口是以http方式提供的。为了实现比较舒服的调用的方式,我不准备以send({"method": "echo"})
这种方式调用,而是api.echo()
但是python里面并没有提供类似php的__call
和__callStatic
的函数
根据python的__getattr__
来实现一个,但是这个解决方案不完美,有局限性。
实现
# encoding: utf-8
import json
import urllib, urllib2
class OPS(object):
s = None
def __init__(self, s):
self.s = s
def sendRequest(self, msg):
postData = json.dumps(msg)
print(postData)
req = urllib2.Request(self.s, postData)
try:
resp = urllib2.urlopen(req)
except Exception as e:
return False
cnt = resp.read()
try:
cnt = json.loads(cnt)
except Exception as e:
pass
return cnt
def __getattr__(self, name):
def func(*args, **kwargs):
# args 不处理 (由于是序列化成json传输的,python的dict是无序的,抛弃对list的处理)
data = {
'method': name,
'parameter': kwargs
}
return self.sendRequest(data)
return func
if __name__ == '__main__':
ops = OPS('你的http接口调用地址')
print(ops.hello(word="你好"))