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

Python中如何基于父类实例创建子类对象并自动继承所有属性?

如何通过父类实例快速初始化子类对象?

你想要的这种“不用逐个赋值父类实例属性”的实现方式完全可行!下面给你两种简单高效的方案:

方案一:直接复用父类实例的属性字典

Python中,大多数对象的实例属性都会存储在__dict__字典里(除非类定义了__slots__)。我们可以直接把父类实例的属性字典更新到子类实例的__dict__中,一步完成所有属性的继承:

class A:
    def __init__(self, name, value):
        self.name = name
        self.value = value

class B(A):
    def __init__(self, instance_of_A):
        # 直接将父类实例的所有属性复制到当前子类实例
        self.__dict__.update(instance_of_A.__dict__)
    
    def add_to_value(self, x):
        return self.value + x

# 测试代码
a = A('my_name', 3)
b = B(a)
c = b.add_to_value(2)
print(c)  # 输出:5
print(b.name)  # 输出:'my_name'

方案二:使用vars()函数简化操作

vars()函数可以返回对象的__dict__属性,用它来写代码会更简洁易懂:

class B(A):
    def __init__(self, instance_of_A):
        self.__dict__.update(vars(instance_of_A))
    
    def add_to_value(self, x):
        return self.value + x

特殊场景适配:父类定义了__slots__

如果你的父类A用了__slots__来限制实例属性集合,那么__dict__就不存在了。这时候需要遍历__slots__里的属性逐个赋值:

class A:
    __slots__ = ['name', 'value']
    def __init__(self, name, value):
        self.name = name
        self.value = value

class B(A):
    __slots__ = []  # 子类需定义__slots__,空列表表示继承父类的属性集合
    def __init__(self, instance_of_A):
        for attr in instance_of_A.__slots__:
            setattr(self, attr, getattr(instance_of_A, attr))
    
    def add_to_value(self, x):
        return self.value + x

这样不管父类有没有用__slots__,你都能轻松实现需求啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:48:14