从父类创建子类,参数相同



我有一个父类Parent和一个子类Child,它们将所有初始化参数转发到Parent。(它只添加了一些方法。(

class Parent:
def __init__(self, alpha, beta, zeta, omicron):
self.alpha = alpha
self.c = alpha + beta + zeta + omicron

class Child(Parent):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def show(self):
print(self.alpha, self.c)

p = Parent(23.7, 0.0, 1.0, -4.1)
# create Child from p?
# c = ... ?

给定父类实例,如何最好地从中创建子类实例?我想我可以添加一些类似的东西

@classmethod
def from_parent(cls, parent):
return cls(
parent.alpha,
# parent.beta,
# parent.zeta,
# parent.omicron
)

但是Parent不具备从中创建另一个实例所需的所有参数

有什么提示吗?

没有通用的方法来实现您想要的。任何实现都将特定于您的类。

但是,如果Child类在其__init__中根本不做任何事情(相当于根本没有__init__(,则实际上可以更改已经拥有的Parent对象的类:

p.__class__ = Child

请注意,这是在原地修改对象,而不是对Child对象进行新的复制。

在这种情况下,Parent.__init__似乎做得太多了。附加的三个自变量独立于Parent的一个实例;它们只是定义CCD_ 12属性的一种方式。

class Parent:
def __init__(self, c):
self.alpha = alpha
self.c = c
@classmethod
def from_parameters(cls, alpha, beta, zeta, omicron):
return cls(alpha, alpha + beta + zeta + omicron)

class Child(Parent):
# Seemingly belongs in Parent, not here.
def show(self):
print(self.alpha, self.c)
@classmethod
def from_parent(cls, p):
return cls(p.alpha, p.c)

p = Parent.from_parameters(23.7, 0.0, 1.0, -4.1)
c = Child.from_parent(p)

最新更新