這個問題在這里已經有了答案: 類屬性和實體屬性有什么區別? (5 個回答) 2天前關閉。
我制作了一個示例 python 腳本來展示我在其他程式中發現的問題的簡化版本。為什么串列表現得像一個靜態變數?我怎樣才能解決這個問題?任何幫助將不勝感激。謝謝!
代碼:
class MyClass:
id = 0
list = []
def addToList(self,value):
self.list.append(value)
def printClass(self):
print("\nPrinting Class:")
print("id: ", self.id)
print("list: ", self.list)
classes = []
# create 4 classes, each with a list containing 1 string
for i in range(0,4):
myClass = MyClass() # create new EMPTY class
myClass.id = i # assign id to new class
myClass.addToList("hello") # add a string to its list
classes.append(myClass) # save that class in a list
for myClass in classes:
myClass.printClass()
輸出:
Printing Class:
id: 0
list: ['hello', 'hello', 'hello', 'hello']
Printing Class:
id: 1
list: ['hello', 'hello', 'hello', 'hello']
Printing Class:
id: 2
list: ['hello', 'hello', 'hello', 'hello']
Printing Class:
id: 3
list: ['hello', 'hello', 'hello', 'hello']
uj5u.com熱心網友回復:
在外部定義的變數__init__由所有實體共享。這就是為什么在串列中添加元素會影響該類的所有其他實體。
您應該改為在以下位置宣告變數__init__:
def __init__(self):
self.id = 0
self.list = []
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/435238.html
下一篇:如何在Python回圈中增加索引
