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

Python子类继承父类时更新继承的字典类属性的正确实现方法

错误原因

  • 类定义阶段不存在self关键字:self仅在类的实例方法中指向实例对象,类加载时还没有实例生成,调用self会直接抛出NameError
  • 变量名拼写错误:原代码中self.filter、new_filter均遗漏了末尾的s,正确属性名应为filters、new_filters

最优实现方案

方案1:直接合并父类类属性(最通用,适合单一场景)

不需要额外封装逻辑,直接引用父类的filters属性合并即可:

class Base:
     filters = {
        'today': '__today'        
    }

class Filter(Base):
     new_filters = {
            'yesterday': '__yesterday'        
        }
     # 直接合并父类filters和当前子类的新增配置
     filters = {**Base.filters, **new_filters}

调用验证:

print(Filter.filters) 
# 输出:{'today': '__today', 'yesterday': '__yesterday'}

方案2:父类统一实现合并逻辑(适合多子类继承场景)

如果有多个子类都需要扩展filters属性,可以在父类用__init_subclass__钩子实现自动合并,避免子类重复写合并代码:

class Base:
    filters = {
        'today': '__today'        
    }

    def __init_subclass__(cls, **kwargs):
        super().__init_subclass__(**kwargs)
        # 子类定义new_filters时自动合并到filters属性
        if hasattr(cls, 'new_filters'):
            # 取父类的filters合并当前子类的新增配置
            cls.filters = {**super(cls, cls).filters, **cls.new_filters}

# 子类只需要定义new_filters即可,无需手动处理合并
class Filter(Base):
    new_filters = {
        'yesterday': '__yesterday'        
    }

# 后续新增子类扩展逻辑同理
class CustomFilter(Filter):
    new_filters = {
        'last_week': '__last_week'
    }

调用验证:

print(CustomFilter.filters)
# 输出:{'today': '__today', 'yesterday': '__yesterday', 'last_week': '__last_week'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:54:02