Python继承类属性批量赋值:子类B如何批量同步父类A实例属性?
批量继承属性赋值的解决方案
你的场景可以通过几种方式实现批量赋值,无需逐个编写属性赋值语句,以下是常用方法:
方法1:利用实例属性字典__dict__(通用无__slots__场景)
如果类A没有使用__slots__限制属性,实例的属性会存储在__dict__字典中,直接批量更新即可:
class B(A): def set_A(self, obj: A): # 直接更新当前实例的属性字典 self.__dict__.update(obj.__dict__)
如果需要仅处理A类本身定义的属性(避免覆盖B类自身扩展的同名属性),可以先筛选出A的非魔法属性:
class B(A): def set_A(self, obj: A): # 筛选A类定义的非下划线开头的属性 a_class_attrs = [attr for attr in dir(A) if not attr.startswith('__')] for attr in a_class_attrs: if hasattr(obj, attr): setattr(self, attr, getattr(obj, attr))
方法2:适配__slots__场景
如果类A使用了__slots__来优化内存,实例不会生成__dict__,此时直接遍历A.__slots__中的属性名赋值:
class A: __slots__ = ['a', 'b', ..., 'z'] # 定义A的所有属性 # 其他类逻辑... class B(A): def set_A(self, obj: A): for attr in A.__slots__: setattr(self, attr, getattr(obj, attr))
方法3:使用copy模块复制实例状态
如果需要完整复制目标A实例的状态(包括浅/深拷贝属性),可以结合copy模块:
import copy class B(A): def set_A(self, obj: A): # 浅拷贝适合不可变属性,深拷贝用于可变属性的递归复制 copied_a = copy.copy(obj) # 或 copy.deepcopy(obj) self.__dict__.update(copied_a.__dict__)
内容的提问来源于stack exchange,提问作者Tomer Wolberg
相关产品推荐
相关产品推荐

