好吧,您不想创建一个实例来创建一个新实例,所以您可能需要一个classmethod或{}。这里也不是使用__call__的地方。在
我可以这样做:class MyChild(MyBase1, MyBase2):
@classmethod
def build_from_bases(klass, base1, base2, **kwargs):
kwargs.update(base1.__dict__)
# Note if base2 has values for x and y, they will clobber what was in base1
kwargs.update(base2.__dict__)
return klass(**kwargs)
但是使用Base1和Base2的实例来构建MyChild的实例并不像我在python中所做的那样。更可能使用显而易见的:
^{pr2}$
真的,我更喜欢这样,现在我不必担心那些令人震惊的价值观,或者其他奇怪的东西。在
如果你真的想要捷径的话,你可以把两者结合起来:class MyChild(MyBase1, MyBase2):
@classmethod
def build_from_bases(klass, base1, base2, **kwargs):
return klass(x=base1.x, y=base1.y, s=base2.s, p=base2.p, **kwargs)
在python中,“聪明”往往是“更好”