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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 02:07:26