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
相关产品推荐
相关产品推荐

