2 回答

TA貢獻1805條經驗 獲得超9個贊
分配時self.data = initial_data,您只需為對象創建另一個新名稱initial_data。
您在這里沒想到的行為是由于默認參數initial_data僅在聲明方法時才被評估一次,而不是每次調用它時,所以所有使用它的實例實際上都使用相同的initial_datadict 對象,您可以以不同的名稱訪問,例如instance_a.data,instance_b.data等等。
經典的解決方案是None默認使用,如下所示:
class MyClass:
def __init__(self, initial_data=None):
if initial_data is None:
initial_data = {}
self.data = initial_data

TA貢獻1878條經驗 獲得超4個贊
因為數據變量的id是一樣的。Python 中的函數是一流的對象,而不僅僅是一段代碼。
print(id(instance_a.data))
# prints of object id
print(id(instance_b.data))
# prints the same object id
這是因為構造函數的參數中的固定值。它不會為每個對象創建一個新字典。
在這樣做時:
def __init__(self):
self.data = {}
你會得到不同的結果。
在這里閱讀更多:http: //effbot.org/zone/default-values.htm
希望這有幫助,祝你好運。
添加回答
舉報