我有以下代码。父类有一个项目列表,子级需要向其中添加。
parent 的每个实例都需要有这个列表,每个 child 都需要有那个列表 + 额外的值。
class Parent(object):
a_list = ['parent_item1', 'parent_item2', ]
def print_list(self):
print(self.a_list)
class Child1(Parent):
def __init__(self, *args, **kwargs):
super(Child1, self).__init__(*args, **kwargs)
self.a_list += ['child1_item']
class Child2(Parent):
def __init__(self, *args, **kwargs):
super(Child2, self).__init__(*args, **kwargs)
self.a_list += ['child2_item']
parent = Parent()
child1 = Child1()
child2 = Child2()
parent.print_list()
# >> ['parent_item1', 'parent_item2', 'child1_item', 'child2_item']
child1.print_list()
# >> ['parent_item1', 'parent_item2', 'child1_item', 'child2_item']
child2.print_list()
# >> ['parent_item1', 'parent_item2', 'child1_item', 'child2_item']
我怎样才能得到下面的结果?
['parent_item1', 'parent_item2', ]
['parent_item1', 'parent_item2', 'child1_item', ]
['parent_item1', 'parent_item2', 'child2_item', ]
最佳答案
list += other_list
就地扩展列表。使用返回新列表的 +
运算符:
class Parent(object):
a_list = ['parent_item1', 'parent_item2', ]
def print_list(self):
print(self.a_list)
class Child1(Parent):
def __init__(self, *args, **kwargs):
super(Child1, self).__init__(*args, **kwargs)
self.a_list = self.a_list + ['child1_item'] # <-------
class Child2(Parent):
def __init__(self, *args, **kwargs):
super(Child2, self).__init__(*args, **kwargs)
self.a_list = self.a_list + ['child2_item'] # <-------
parent = Parent()
child1 = Child1()
child2 = Child2()
parent.print_list()
child1.print_list()
child2.print_list()
输出:
['parent_item1', 'parent_item2']
['parent_item1', 'parent_item2', 'child1_item']
['parent_item1', 'parent_item2', 'child2_item']
或者,您可以复制父类的列表:
...
self.a_list = self.a_list[:]
self.a_list += ['child1_item']
关于python - 如何从父类扩展列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26426154/