Python:当在参数内创建的列表中扩展时,列表类型变为 None(超出范围?)

Python: List type becomes None (out of scope?) when extended insde a list created inside an argument

我试图扩展列表 class 以便我可以将名称添加到列表中,稍后我想创建所有列表

所以我有以下代码: 但问题是它只适用于一级

class seg(list):
    def __init__(self, value):
        self.value = value

def show_hierarchy(fl,hierarchy=""):
    hierarchy += fl.value + " - "
    print(hierarchy.rstrip(" - "))
    for lists in fl:
        show_hierarchy(lists, hierarchy)

# one level deep
fl = seg("1")
fl.extend([
    seg("1.1"),
    seg("1.2"),
    seg("1.3"),
    seg("1.4")])

print(fl)
show_hierarchy(fl)

# two levels deep
fl = seg("1")
fl.extend([
    seg("1.1"),
    seg("1.2").extend([
        seg("1.2.1"),
        seg("1.2.2")])])

print(fl)
show_hierarchy(fl)

输出如下:

[[], [], [], []]
1
1 - 1.1
1 - 1.2
1 - 1.3
1 - 1.4
[[], None]
1
1 - 1.1

我真的很想知道发生了什么以及我该如何解决这个问题。

按照惯例,Python 容器 return None 上的增变器方法(并非总是如此,请考虑 list.pop)。当然,您可以在派生 class 中更改此行为,但我不知道这是否是个好主意:

In [121]: class seg(list):
     ...:     def __init__(self, value):
     ...:         self.value = value
     ...:     def extend(self, value):
     ...:         list.extend(self, value)
     ...:         return self
     ...:

In [122]: fl = seg("1")
     ...: fl.extend([
     ...:     seg("1.1"),
     ...:     seg("1.2").extend([
     ...:         seg("1.2.1"),
     ...:         seg("1.2.2")])])
     ...:
Out[122]: [[], [[], []]]

In [123]: def show_hierarchy(fl,hierarchy=""):
     ...:     hierarchy += fl.value + " - "
     ...:     print(hierarchy.rstrip(" - "))
     ...:     for lists in fl:
     ...:         show_hierarchy(lists, hierarchy)
     ...:

In [124]: show_hierarchy(fl)
1
1 - 1.1
1 - 1.2
1 - 1.2 - 1.2.1
1 - 1.2 - 1.2.2

最终对我有用的是:

class seg(list):
    def __init__(self, value):
        self.value = value

    def add(self, lists):
        for l in lists:
            self.append(l)
        return self

# two levels deep
fl = seg("1")
fl.add([
    seg("1.1"),
    seg("1.2").add([
        seg("1.2.1"),
        seg("1.2.2")])])