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

