【发布时间】:2020-07-27 14:55:56
【问题描述】:
我有一种情况,我用几个属性扩展了一个类:
class SuperClass:
def __init__(self, tediously, many, attributes):
# assign the attributes like "self.attr = attr"
class SubClass:
def __init__(self, id, **kwargs):
self.id = id
super().__init__(**kwargs)
然后我想创建实例,但我知道这会导致子类只能像这样实例化:
super_instance = SuperClass(tediously, many, attributes)
sub_instance = SubClass(id, tediously=super_instance.tediously, many=super_instance.many, attributes=super_instance.attributes)
我的问题是,是否可以通过复制超类实例的属性来实例化子类更漂亮/更简洁,而无需编写一段香肠代码来手动执行它(在构造函数调用或构造函数的主体中) )... 类似:
utopic_sub_instance = SubClass(id, **super_instance)
【问题讨论】:
-
@mkrieger1 不是真的,如果我能以某种方式将 super_instance 传递给 SubClass 的构造函数并让它填充从 SuperClass 继承的字段,我很感兴趣。我基本上是想避免必须手动分配从 SuperClass 继承的许多属性
-
是的,您可以通过编写一个可以调用的替代构造函数来做到这一点,如
SubClass.from_superclass(super_instance, id)- 如何编写替代构造函数在另一个问题中显示。 -
@mkrieger1 但我不必在这个 alt 构造函数中手动将 super_instance 中的属性值分配给 SubClass 的 self 属性吗?
标签: python python-3.x oop instantiation subclassing