如何调用函数并在 Python class 中传递参数?
how can I call a function and pass params in a Python class?
我正在尝试使用 Woo 交易所交易 api。他们提供了一段代码,这是一个令人印象深刻的 Python class 结构。复制如下。
我的问题是如何使用它?
我试过运行:
get_orders(self, 'BTCUSDT')
抛出错误“NameError: name 'self' is not defined”
和
get_orders('BTCUSDT')
抛出“类型错误:get_orders() 缺少 1 个必需的位置参数:'symbol'”
这里是代码(class 结构),友人提供:
import requests
import datetime
import time
import hmac
import hashlib
from collections import OrderedDict
#Application ID 9d4d96f6-3d3b-4430-966d-8733aa3dc3bc
#API Key
api_key = 'my_api_key'
#API Secret
api_secret = 'my_api_secret'
class Client():
def __init__(self, api_key=None, api_secret=None):
self.api_key = api_key
self.api_secret = api_secret
self.base_api = "https://api.woo.network/v1/"
def get_signature(self, params, timestamp):
query_string = '&'.join(["{}={}".format(k, v) for k, v in params.items()]) + f"|{timestamp}"
signature = hmac.new(
self.api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
def get_orders(self, symbol):
url = self.base_api + "orders/"
params = {
"symbol": 'BTCUSDT'
}
params = OrderedDict(sorted(params.items()))
timestamp = str(int(time.time() * 1000))
signature = self.get_signature(params, timestamp)
headers = {
'Content-Type': "application/x-www-form-urlencoded",
'x-api-key': self.api_key,
'x-api-signature': signature,
'x-api-timestamp': timestamp,
'cache-control': 'no-cache'
}
resp = requests.get(url=url, params=params, headers=headers).json()
因此,重复和总结一下,当我编写自己的代码以使用此 class 时,我如何调用函数 get_orders() 并且更一般地说,引用class结构?在此先感谢您的帮助。
看起来您已经截断了代码,因为 get_orders 似乎 return 什么都没有。
但是,您可以像这样构建一个 Client 实例:
client = Client(api_key, api_secret)
...然后...
client.get_orders(None)
这可能看起来有点奇怪,但 get_orders 需要一个参数,但从未使用过。我不认为 get_orders 的实现完全符合预期,因为它将始终使用 BTCUSDT
我正在尝试使用 Woo 交易所交易 api。他们提供了一段代码,这是一个令人印象深刻的 Python class 结构。复制如下。
我的问题是如何使用它?
我试过运行:
get_orders(self, 'BTCUSDT')
抛出错误“NameError: name 'self' is not defined”
和
get_orders('BTCUSDT')
抛出“类型错误:get_orders() 缺少 1 个必需的位置参数:'symbol'”
这里是代码(class 结构),友人提供:
import requests
import datetime
import time
import hmac
import hashlib
from collections import OrderedDict
#Application ID 9d4d96f6-3d3b-4430-966d-8733aa3dc3bc
#API Key
api_key = 'my_api_key'
#API Secret
api_secret = 'my_api_secret'
class Client():
def __init__(self, api_key=None, api_secret=None):
self.api_key = api_key
self.api_secret = api_secret
self.base_api = "https://api.woo.network/v1/"
def get_signature(self, params, timestamp):
query_string = '&'.join(["{}={}".format(k, v) for k, v in params.items()]) + f"|{timestamp}"
signature = hmac.new(
self.api_secret.encode('utf-8'),
query_string.encode('utf-8'),
hashlib.sha256
).hexdigest()
return signature
def get_orders(self, symbol):
url = self.base_api + "orders/"
params = {
"symbol": 'BTCUSDT'
}
params = OrderedDict(sorted(params.items()))
timestamp = str(int(time.time() * 1000))
signature = self.get_signature(params, timestamp)
headers = {
'Content-Type': "application/x-www-form-urlencoded",
'x-api-key': self.api_key,
'x-api-signature': signature,
'x-api-timestamp': timestamp,
'cache-control': 'no-cache'
}
resp = requests.get(url=url, params=params, headers=headers).json()
因此,重复和总结一下,当我编写自己的代码以使用此 class 时,我如何调用函数 get_orders() 并且更一般地说,引用class结构?在此先感谢您的帮助。
看起来您已经截断了代码,因为 get_orders 似乎 return 什么都没有。
但是,您可以像这样构建一个 Client 实例:
client = Client(api_key, api_secret)
...然后...
client.get_orders(None)
这可能看起来有点奇怪,但 get_orders 需要一个参数,但从未使用过。我不认为 get_orders 的实现完全符合预期,因为它将始终使用 BTCUSDT