Python:创建新对象时覆盖的对象属性

时间:2018-03-26 13:29:02

标签: python

以下是我正在处理的代码:

class Node:
    count = 0

    def __init__(self):
        Node.id = Node.count
        Node.count += 1

    @classmethod
    def get_count(cls):
        return Node.count


class Element:

    count = 0

    def __init__(self, type = "MTH20", group = 0):
        self.type = type
        self.group = group
        Element.count += 1

    def define_element(self):
        self.nodes = [-1]*3

        for l in range(len(self.nodes)):
            if self.nodes[l] == -1:
                self.nodes[l] = Node()
                print(self.nodes[l].id)

        for l in range(len(self.nodes)):

            print(self.nodes[l].id)  

ga = Element()

ga.define_element()

我希望此代码的输出为:

0
1
2
0
1
2

但是我得到了这个:

0
1
2
2
2
2

我的结论是,在构造新节点时,某种程度上会覆盖节点对象的id属性。但是,我不明白为什么会这样做,或者如何避免这种情况。

有谁可以指出我做错了什么?

1 个答案:

答案 0 :(得分:2)

使用<div id="container"> <h1>Hello, world!</h1> <h4>Input your console data below : </h4> <form action="" id="form" onsubmit="sConsole(event)"> <input type="text" name="data" id="data"> <button type="submit">Submit</button> </form> </div>您正在访问类属性。您希望通过执行Node.id将ids存储为实例属性。

self.id

关于您的代码

我想指出,您的class Node: count = 0 def __init__(self): self.id = Node.count # We want id to be an attribute of that specific node Node.count += 1 方法可以用更简洁的方式编写。

Element.define_element