python - 如何从父类扩展列表?

标签 python list inheritance superclass

我有以下代码。父类有一个项目列表,子级需要向其中添加。

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/

相关文章:

python - jedi-vim 与 jedi 输出不一致

python - 如何从特定半径开始绘制 imshow?

java - 在 Java 中加入两个列表

Java Jsoup 打印 For 循环

javascript - Javascript 中的委托(delegate) VS 连接

python - 从终端运行 python 函数

python - 使用有限数据查找多边形的中心

python - 对象之间的对象python

java - Java中的逆变和继承有什么区别?

C# 泛型和泛型约束