[英]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.