rest - 为什么参考不能正常工作?
问题描述
我对 Python、整个 API 和 Stack Overflow 都很陌生。我想连接到 Bricklink rest API 和一个我在 github 上找到的库。现在的问题是,该库有一个类 a,它在另一个类中获取一个实例,如果我运行代码,类 c 想要通过类 b 使用类 a 的 get 函数(我真的不知道是否这对你们有意义,对不起!)我将提供一些代码以便更好地理解。(这里是 Bricklink 库的链接:https ://github.com/robbietjuh/py-bricklink )
我试图将 self.client 放在括号中,希望它能获得更高的优先级,但它没有用。我搜索了类似的东西,但总是很难理解或没有帮助。
class Method: # this is class b
client = None
def __init__(self, client):
self.client = client
class Orders(Method): # this is class c
URL_ORDER_LIST = 'orders'
URL_ORDER_DETAILS = 'orders/{order_id}'
URL_ORDER_ITEMS = 'orders/{order_id}/items'
URL_ORDER_MESSAGES = 'orders/{order_id}/messages'
URL_ORDER_FEEDBACK = 'orders/{order_id}/feedback'
URL_ORDER_UPDATE = 'orders/{order_id}'
URL_ORDER_UPDATE_STATUS = 'orders/{order_id}/status'
URL_ORDER_UPDATE_PAYMENT_STATUS = 'orders/{order_id}/status'
def getOrders(self, direction='in', status='', filed=False):
params = {
'direction': direction,
'status': status,
'filed': filed,
}
return self.client.get(self.URL_ORDER_LIST, params)
下面的代码在另一个文件中
class ApiClient: # this is class a
def __init__(self, consumer_key, consumer_secret, access_token, access_token_secret):
self.service = OAuth1Service(name='bricklink',
consumer_key=consumer_key,
consumer_secret=consumer_secret, base_url='https://api.bricklink.com/api/store/v1/')
self.session = self.service.get_session((access_token, access_token_secret))
self.orders = Orders(self)
def request(self, method, url, params):
if method in ('POST', 'PUT', 'DELETE'):
response = self.session.request(method, url, True, '', data=json.dumps(params), headers={'Content-Type': 'application/json'}).json()
else:
response = self.session.request(method, url, True, '', params=params).json()
return self.processResponse(response, method, url, params)
def get(self, url, params={}): # here is the get function, that is needed to be accessed
return self.request('GET', url, params)
test = ApiClient('consumer_key', 'consumer_secret', 'access_token', 'access_token_secret')
print(test)
meth = a.Method(test)
order = a.Orders(meth)
order.getOrders(direction='in', status='', filed=False)
错误:
Traceback (most recent call last):
File "D:/Python Projects/Neuer Ordner/py-bricklink-master/bricklink/api.py", line 96, in <module>
order.getOrders(direction='in', status='', filed=False)
File "D:\Python Projects\Neuer Ordner\py-bricklink-master\bricklink\a.py", line 36, in getOrders
return self.client.get(self.URL_ORDER_LIST, params)
AttributeError: 'Method' object has no attribute 'get'
所以它应该给我一个包含 order_ids 和更多的列表,但是如果我运行它,我只会得到响应“'Method' object has no attribute 'get'”并且行中有错误,我在其中调用函数“getOrders(...)”和“return self.client.get(self.URL_ORDER_LIST, params)”,其中函数 getOrders(...) 返回值。
解决方案
推荐阅读
- swift - NSAttributedString 不改变 NSTextview 某些文本的颜色
- javascript - 如何从 redux 添加操作连接到组件道具打字稿
- node.js - 我们可以说“如果一个 API 遵循 REST 的 6 个约束,那么它就是一个 RESTful API”?
- linux - 如何使用 CPack 命令(不是来自 CMake 的文件)创建 debian 包?
- qt - QListView 视图中的最大项目数
- apache-spark - 如何在 Spark Structured Streaming 作业中找到从 Kafka 获取数据所需的时间?
- algorithm - 系列 1 + (1+2+1) + (1+2+1+3+1+2+1) 的总和
- graphql - Gatsby buildObjectType 用于项目数组
- winapi - 如何将 50% 的不透明颜色填充到多边形?
- wix - 为非默认路径运行卸载时,WiX 会引入正在运行的程序