用于实例化的动态命名

时间:2013-12-16 19:26:28

标签: python oop instantiation factory

这是一个概念性问题,我需要为网络模拟实例化一些“节点”。命名是问题 - 我需要一种方法来自动生成实例的名称(任何允许我在创建后跟踪和引用节点的方法)

为了更好地了解我需要什么,这就是大多数循环看起来像是问题所在的主题标签。 x和y将在父函数中定义。

    for n in range(1000):
        #n, but somehow converted into the name of the dict# = {
            'address':n,
            'resistance':x,
            'special':[],
            'parent':y,
            'children':[],
            'adjnodes':[]
    }

道歉是一个菜鸟。我已经搜索了这个问题的答案,所以如果很明显那么我就会滥用这个术语或其他东西;在这种情况下,请让我知道使用什么术语,我会抓住我的帽子,并在我的路上。不是讽刺,只是喜欢在必要时严厉教导。感谢。

2 个答案:

答案 0 :(得分:4)

听起来你正试图将它们创建为一堆独立的变量,然后将变量的名称存储在每个变量的address字段中。

不要那样做。有关原因的说明,请参阅Keep data out of your variable namesWhy you don't want to dynamically create variables。但简短的版本是,尝试这样做是你首先遇到问题的唯一原因。

为什么不在所有节点中创建一个list?然后您的address可以只是该列表的索引。例如:

nodes = []
for n in range(1000):
    nodes.append({
        'address':n,
        'resistance':x,
        'special':[],
        'parent':y,
        'children':[],
        'adjnodes':[]
    })

或者,如果您计划在进行时添加和删除节点,那么列表索引将不会保持一致,只需使用dict

nodes = {}
for n in range(1000):
    nodes[n] = {
        'address':n,
        'resistance':x,
        'special':[],
        'parent':y,
        'children':[],
        'adjnodes':[]
    }

答案 1 :(得分:1)

如果n有意义,您可以将dict中的每一个放入另一个dict作为密钥的n

如果n没有意义,只需将dict添加到list

无论哪种方式,请将数据保留在变量名称之外。