如何为一个类创建n个实例?

2024-03-29 02:31:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个代码,通过它我可以设置一个变量,比如n,为那个特定的类创建n个实例。实例必须命名为“Node_1”、“Node_2”…“Node_n”。我尝试了几种使用for循环的方法来实现这一点,但是我总是得到错误:“cannotassigntooperator。”

我最近的努力如下:

class C():
    pass
for count in range(1,3):
    "node"+str(count)=locals()["C"]()

print(node)

我知道"node" + str(count)是不可能的,但我不知道如何解决这个问题。你知道吗

对此事的任何帮助都将不胜感激。你知道吗


Tags: 实例方法代码innodeforcount错误
3条回答

你可以做你想做的事,但这真是个坏主意。您应该使用listdict;因为您似乎希望名称是nodeX,并且从1开始,您应该使用dict。你知道吗

nodes = {'node{}'.format(x): C() for x in range(1, 3)}

根据所做的工作,还可以使用defaultdict。你知道吗

from collections import defaultdict

nodes = defaultdict(C)

print(nodes['node1'])

nodes['node2'].method()

print(nodes['anything-can-go-here'])

但是,一旦您这样做了,就不需要使用'node'前缀了。你知道吗

您正在尝试为字符串赋值。你可以写Node_1 = C(),但是"Node_1" = C()没有意义,因为"Node_1"是一个字符串,而不是一个标识符。你知道吗

这有点粗略,但您可以使用locals()字典按名称访问标识符:

for count in range(1, 3):
    locals()["node" + str(count)] = C()

…这样做之后,就可以使用node1node2,就好像它们是在代码中显式定义的一样。你知道吗

但是,通常情况下,最好不要以这种方式访问本地语言,而应该使用一个单独的词典,该词典包含您自己创建的内容,并包含以下值:

nodes = {}
for count in range(1, 3):
    nodes[count] = C()

。。。然后可以像这样访问这些值:nodes[1]nodes[2],等等

创建几个类似对象的最佳模式是list理解:

class C():
    pass

nodes = [C() for i in range(3)]

这将留给您三个类C的对象,它们存储在名为nodeslist中。通过索引(例如nodes[0])以正常方式访问每个对象。你知道吗

相关问题 更多 >