将servles从Parent类继承到Child类

时间:2016-12-19 12:34:01

标签: python python-3.x class

我有一个具有默认值的Parent类。所有其他对象都继承。

class Parent():
    def __init__(self, a, b, x, y):
        self.a = a
        self.b = b
        self.x = x
        self.y = y

class Child(Parent):
    def __init__(self, a, b, x, y):
        super().__init__(self, a, b)
        self.x = x
        self.y = y 

我希望ParentChild具有相同的ab。所以我不想一直写:

v = Child(a,b,x,y)

但:

v = Child(x,y)

3 个答案:

答案 0 :(得分:2)

我将假设您有多个Parent()个实例,并且您希望使用一个的默认值创建Child()个实例。

您可以在父级上创建工厂方法:

class Parent():
    def __init__(self, a, b, x, y):
        self.a = a
        self.b = b
        self.x = x
        self.y = y

    def create_child(self, x, y):
        return Child(self.a, self.b, x, y)

child = parent.create_child(x, y)

或者给Child工厂类方法:

class Child(Parent):
    @classmethod
    def from_parent(cls, parent, x, y):
        return cls(parent.a, parent.b, x, y)

并使用:

child = Child.from_parent(parent, x, y)

选择最适合您的算法生成子节点所需方法的方法。

后一种方法的演示:

>>> parent = Parent('foo', 'bar', 10, 20)
>>> child = Child.from_parent(parent, 52, 1)
>>> vars(child)
{'a': 'foo', 'b': 'bar', 'x': 52, 'y': 1}

答案 1 :(得分:0)

也许你想使用类变量呢?

class Parent():
    a = 2
    b = 3
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Child(Parent):
    pass

v = Child(x,y)

答案 2 :(得分:-1)

Parent似乎没有属性ab的默认值。我建议您使用类变量对代码进行微小的更改

class Parent():
    a = 'foo'
    b = 'bar'
    def __init__(self, x, y):
        self.x = x
        self.y = y

class Child(Parent):
    def __init__(self, x, y):
        self.x = x
        self.y = y