You need to enable JavaScript to run this app. Python继承币安Client时super对象报无testnet属性的AttributeError问题
优惠活动
大模型
产品
解决方案
定价
更多

Python继承币安Client时super对象报无testnet属性的AttributeError问题

异常产生原因与正确实现方式

核心报错根源

你遇到的报错本质和super()的设计机制有关,与币安SDK本身无关:

  • super()在Python 3中返回的不是父类的真实实例,而是一个临时的属性代理对象。这个代理对象的唯一设计目的,是帮你在子类中转发父类的方法调用——你之前直接调用super().get_ticker()没有任何问题,就是因为这类场景完全匹配代理对象的设计预期。
  • 代理对象本身不具备独立的实例属性存储能力,它的属性查找逻辑有严格限制:只会沿着当前类的方法解析顺序(MRO),查找链上类层面定义的方法、类变量,并不会直接拥有真实实例的全部动态属性。
  • 你之前打印super().__dict__能看到testnet属性,其实是被代理的转发逻辑误导了:因为__dict__不是代理对象自身的核心内置属性,访问时会被直接转发到绑定的当前实例(也就是你的Binance_Data对象),你拿到的其实是实例本身的属性字典,根本不是super代理对象自己的属性。
  • 而testnet是币安Client类在__init__方法中给实例动态设置的实例属性,存储在实例的__dict__中,不属于类层面的定义。当你把super()代理对象传给BinanceSocketManager,它尝试读取client.testnet时,代理对象既没有这个内置属性,也无法匹配外部类对真实Client实例的访问预期,自然就抛出了AttributeError。

代码修正方案

你的Binance_Data类本身继承自Client,完全是合法的Client实例,满足BinanceSocketManager的参数要求,根本不需要用super()传参,直接传入self即可。同时你原代码里还有几个隐性bug需要一并修正:

  1. 子类__init__调用父类构造函数时,不要硬编码requests_params=None,要把接收的形参透传给父类,不然自定义的请求参数会被丢失
  2. 实例方法作为socket回调函数时,需要显式绑定当前实例,不然会因为缺少self参数触发运行时错误
  3. 提前定义好时间转换的工具函数,避免触发NameError

修正后的核心代码如下:

from binance.client import Client
from binance.websockets import BinanceSocketManager

# 提前定义时间转换函数
def convert_unix_to_utc(unix_timestamp):
    # 补充你自己的时间转换逻辑即可
    pass

class Binance_Data(Client):
    def __init__(self, api_key, api_secret, requests_params=None, tld='us'):
        # 透传所有接收的参数,不要硬编码覆盖形参
        super().__init__(api_key, api_secret, requests_params=requests_params, tld=tld)

    def data_stream_test(self, data):
        print('------------------')
        print(f"Event Title: {data['e']}")
        print(f"Closing Price: {data['c']}")
        print(convert_unix_to_utc(data['E']))
        print('------------------')

    def data_stream(self):
        # 直接传入self,不需要传super()
        ds = BinanceSocketManager(self)
        # 传入绑定了self的回调方法
        conn_key = ds.start_symbol_ticker_socket('XLMUSDT', self.data_stream_test)
        ds.start()

内容的提问来源于stack exchange,提问作者Tom

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.24 04:36:01