代码之家  ›  专栏  ›  技术社区  ›  Nico Schlömer David Maze

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

  •  0
  • Nico Schlömer David Maze  · 技术社区  · 3 年前

    我有一个家长班 Parent 还有一个儿童班 Child 将所有初始化参数转发给 . (它只添加了几个方法。)

    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
        )
    

    但是 父母亲

    有什么提示吗?

    2 回复  |  直到 3 年前
        1
  •  1
  •   Blckknght    3 年前

    但是,如果 Child __init__ (这相当于没有 实际上,您可以更改 Parent

    parent.__class__ = Child
    

    请注意,这是在原地修改对象,而不是创建对象的新副本 小孩

        2
  •  1
  •   chepner    3 年前

    在这种情况下,似乎 Parent.__init__ 做得太多了。另外三个参数独立于 Parent c 属性

    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)