gpt4 book ai didi

python - 滥用点语法来方便地访问 Python 中的 API

转载 作者:行者123 更新时间:2023-12-04 16:57:59 27 4
gpt4 key购买 nike

我想为 flickr-API 写一个方便的界面在 Python . API提供的方法

flickr.galleries.addPhoto
flickr.galleries.create
flickr.cameras.getBrandModels
flickr.cameras.getBrands
etc.

用于普通的 http 请求,例如
http://api.flickr.com/services/rest/?method=flickr.X&param1=value1&param2=value2&param3&

我的想法是写一个 class flickr ,这可能使我能够在 Python 中以相同的语法调用方法。所以 flickr 类应该使我能够访问标识符 X=galleries.addPhoto当我打电话时
flickr.X(param1=value1,param2=value2)

我想过使用 getattr函数使用函数名作为参数,但不幸的是我失败了。

有没有办法访问 X 的名称而忽略点。

附言 class flickr不应该检查(或保持)“命名空间”的确切结构,如画廊、相机等,尽可能保持通用,并且不会受到影响,因为方法的名称将来会发生变化。

最佳答案

我不知道到目前为止我是否建议扩展 python 语法,但 getattr 类方法将起作用。每当您访问不在类字典中的成员时都会调用它,因此您需要确保“X”不是类成员,使用类似“_X”的东西,然后使用这样的类结构:

class a(object):
def _hi(self):
print "hello"

def __getattr__(self, val):
a.__dict__["_" + val](self)

>>> b = a()
>>> b.hi
hello

***编辑:处理点语法
class A(object):
def __init__(self, call_tree=None):
self.call_tree = call_tree

def __getattr__(self, val):
if self.call_tree:
new_call_tree = '.'.join([self.call_tree, val])
else:
new_call_tree = val
return A(call_tree=new_call_tree)

def __call__(self, *args, **kwargs):
url = 'https://api.flickr.com/?function={}'.format(self.call_tree)
print url

>>> b = A()
>>> b.hi.mom()
https://api.flickr.com/?function=hi.mom
>>> b.hi.dad()
https://api.flickr.com/?function=hi.dad

关于python - 滥用点语法来方便地访问 Python 中的 API,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19415023/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com