如何在Python中创建类的默认对象列表?

4 投票
3 回答
555 浏览
提问于 2025-04-18 18:07

我在Python里定义了一个类。

class node(object):
    def __init__(self, children = []):
        self.children = children

我想创建一个默认对象的列表或数组,这些对象都是这个node类的。例如,像C++那样。

node * nodes = node[100];

这样的话,nodes就会指向一个包含100个node类默认对象的数组。

在Python中怎么做类似的事情呢?谢谢。

3 个回答

3
[node() for _ in range(100)]
class node(object):
    def __init__(self, children=None):
        if children is None: children = []
        self.children = children
In [18]: class node(object):
   ....:     def __init__(self, children = []):
   ....:            self.children = children
   ....:         

In [19]: n1= node()

In [20]: n2 = node()

In [21]: n1.children.append("foo") # add using n1 

In [22]: n1.children
Out[22]: ['foo']

In [23]: n2.children # also effects n2's children list
Out[23]: ['foo']
In [24]: class node(object):
   ....:     def __init__(self, children=None):
   ....:            if children is None: children = []
   ....:            self.children = children
   ....:         

In [25]: n1= node()

In [26]: n2 = node()

In [27]: n1.children.append("foo")

In [28]: n1.children
Out[28]: ['foo']

In [29]: n2.children
Out[29]: []

正如我在评论中提到的:

如果你使用了 def __init__(self, children= []): 这样的写法,那么你对这个列表所做的任何修改都会影响到所有的实例:

正确的写法是:

5

你可以使用列表推导式

nodes = [node() for _ in range(100)]

Python并没有“数组”这个概念,但它有列表,这是一种更高级的结构。列表可以像C语言中的数组那样进行索引,并且支持更多复杂的操作

7

使用列表推导式:

nodes = [node() for _ in range(100)]

撰写回答