You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:28:21