簡體   English   中英

Python:創建新對象時,對象屬性被覆蓋

[英]Python : Object attributes overwritten when creating a new object

這是我正在處理的代碼:

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屬性。 但是,我不知道為什么會這樣做,或者如何避免這種情況。

誰能指出我做錯了什么?

使用Node.id您可以訪問類屬性。 您想通過執行self.id將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方法可以用更簡潔的自然方式編寫。

class Element:

...

def define_element(self):
        self.nodes = [Node() for _ in range(3))]

        for node in self.nodes:
                print(node)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM