我有一个具有默认值的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
我希望Parent
和Child
具有相同的a
和b
。所以我不想一直写:
v = Child(a,b,x,y)
但:
v = Child(x,y)
答案 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
似乎没有属性a
和b
的默认值。我建议您使用类变量对代码进行微小的更改
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