如何在子类构造方法中通过**kwargs参数更新继承自父类的变量值
实现方案
核心逻辑是先调用父类构造方法完成默认属性初始化,再用传入的关键字参数匹配更新对应属性即可。
完整实现代码
class ABC: def __init__(self): self.var_1 = 'a' self.var_2 = 'b' class XYZ(ABC): def __init__(self, **kwargs): # 执行父类构造方法,初始化所有继承的默认属性 super().__init__() # 遍历关键字参数,仅更新父类已定义的属性(避免新增不必要的实例属性) for attr_name, attr_val in kwargs.items(): if hasattr(self, attr_name): setattr(self, attr_name, attr_val)
简化写法(无属性校验)
如果不需要限制只能更新父类已有属性,可以直接用字典更新方法简化代码:
class XYZ(ABC): def __init__(self, **kwargs): super().__init__() self.__dict__.update(kwargs)
效果验证
# 无参数实例化,保留父类默认值 a = XYZ() print(a.var_1) # 输出:a # 传入关键字参数,覆盖对应属性默认值 b = XYZ(var_1='updated_value') print(b.var_1) # 输出:updated_value
内容的提问来源于stack exchange,提问作者Muhammad Daniyal
相关产品推荐
相关产品推荐

