无法创建节点对象python的新实例

时间:2014-04-10 19:32:29

标签: python nodes

我正在尝试在python中实现图形结构。整个逻辑有点奇怪,但我面临一个非常具体的问题。

t_graph = graph()

for i in range(0, 2):
    non_emitting_state = template_node(-1, -1, 1, emitting=True, next_level = i)
    t_graph.add_node(non_emitting_state)
    for j in range(0, 2):
        for k in range(0, 3):
            t_node = template_node(i, j, k)
            t_graph.add_node(t_node)

我的节点对象是

class template_node:
    parents  = []
    children = []
    mu = []
    sigma = []
    emitting = False
    identifier = [0 for x in range(3)]

    def __init__(self, level_no, HMM_no, state_no, emitting = False, next_level = -1):
        if next_level == -1: next_level = level_no + 1

        self.identifier[0] = level_no
        self.identifier[1] = HMM_no
        self.identifier[2] = state_no

,图表类是

class graph:
    template_nodes = []
    def add_node(self, template_node):
        self.template_nodes.append(template_node)

但是在检查标识符的循环之后,所有都是相同的,一个对应于循环链中的最后一次迭代。 即所有节点的标识符都为[1,1,2],这意味着每次创建新节点时,它都会覆盖现有节点的属性。

我试过t_graph.add_node(copy.deepcopy(t_node))但仍然是一样的。 任何关于我应该做什么的想法,以避免覆盖领域。

1 个答案:

答案 0 :(得分:1)

identifier是一个类变量,不是特定于实例的。移动

parents  = []
children = []
mu = []
sigma = []
emitting = False
identifier = [0 for x in range(3)]

进入__init__()。同样也适用于图表类。