Python 3.6.3中get_products()缺失self参数报错求助
解决 TypeError: get_products() missing 1 required positional argument: 'self' 问题
核心错误原因
你碰到的这个报错,本质是直接用类名调用了需要实例化才能使用的方法。PublicClient是一个类,它的get_products()属于实例方法——必须先创建PublicClient的实例对象,才能调用这个方法,而不是直接通过类名去调用。
修复核心报错的代码修改
把__init__方法里的相关代码调整成这样:
def __init__(self): # 先创建PublicClient的实例对象 gdax_client = PublicClient() # 通过实例调用get_products()方法 print([product['id'] for product in gdax_client.get_products()]) self.pair = [i.strip() for i in input("Enter: ").split(",")] # 注意:这里self.pair是列表,后续URI格式化需要调整,下面会说明
其他需要优化的潜在问题
除了核心报错,你的代码还有几个细节需要处理:
- URI格式化错误:
self.pair是列表(因为split(",")返回列表),直接放到format(pair=self.pair)里会生成类似https://api.gdax.com/products/['BTC-USD']/candles的无效URI。如果支持多交易对,需要循环遍历每个交易对单独构造URI;如果只需要单个,就取列表第一个元素:# 假设用户输入单个交易对,取第一个元素并去除前后空格 self.target_pair = self.pair[0].strip() self.uri = f'https://api.gdax.com/products/{self.target_pair}/candles' - 静态方法未实现:
dataToIso8681目前只返回0,需要补充实际的ISO8601格式转换逻辑(GDAX API通常要求带Z的UTC格式):@staticmethod def dataToIso8681(date): """convert a datetime object to the ISO-8601 format""" return date.isoformat() + 'Z'
完整修复后的示例代码
from datetime import datetime, timedelta from time import sleep from gdax.public_client import PublicClient import requests class MyGdaxHistoricalData(object): """class for fetch candle data for a given currency pair""" def __init__(self): # 实例化PublicClient并获取产品列表 gdax_client = PublicClient() product_list = gdax_client.get_products() print("Available products:") print([product['id'] for product in product_list]) self.pair = [i.strip() for i in input("\nEnter your product name(s) separated by a comma: ").split(",")] # 为每个交易对生成合法URI for pair in self.pair: valid_uri = f'https://api.gdax.com/products/{pair}/candles' print(f"Generated URI for {pair}: {valid_uri}") @staticmethod def dataToIso8681(date): """convert a datetime object to the ISO-8601 format""" return date.isoformat() + 'Z' if __name__ == "__main__": MyData = MyGdaxHistoricalData()
内容的提问来源于stack exchange,提问作者Johnny88520
相关产品推荐
相关产品推荐

