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

父类类属性未在子类间共享的原因及解决方法咨询

问题原因

Python的类属性继承机制导致了该行为:

  • 父类StandardClass的_my_table是类属性,但子类调用__init__时,cls指向的是子类本身(ClassFoo或ClassBar),而非父类StandardClass。
  • 创建ClassFoo实例时,ClassFoo._my_table先继承父类的None,赋值操作会给ClassFoo自身添加一个同名类属性,与父类的_my_table完全独立。
  • 创建ClassBar实例时,ClassBar._my_table依然继承父类的None,因此会再次触发SQL读取操作。
解决方案

要让所有子类共享同一份_my_table数据,直接操作父类的类属性即可,修改父类的__init__方法:

from abc import ABC
import pandas as pd

class StandardClass(ABC):
    _my_table = None
    _connection = None  # 假设已正确初始化数据库连接

    @classmethod
    def __init__(cls):
        if StandardClass._my_table is not None:
            return
        # 直接修改父类的_my_table属性,实现子类共享
        StandardClass._my_table = pd.read_sql(_my_table_query(), cls._connection)
    # 此处定义抽象方法

修改后,无论哪个子类调用初始化方法,都会检查父类的_my_table状态,第一次赋值完成后,所有后续子类实例化都会跳过SQL读取操作。

若_connection也是所有子类共享的资源,同样可以改为StandardClass._connection,确保统一使用父类的连接配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 16:32:11