0
我想創建一個方法,它返回一個列表,該列表將實例的類的內容實例作爲參數傳遞以供參考。列表(實例)中的每個元素都有一個屬性(實例變量),它是一個字典,每個元素的內容必須與每個元素不同,問題是,即使正確使用其字典中的正確內容創建實例,當它們被追加到要返回的列表中時,列表中的實例的所有字典(attrs)將獲得相同的內容。使用python中的對象列表
這是代碼
class ModelManager():
def get_subset(self, entity_class, condition_string, persistant):
entity_subset=[]
entity_attrs={}
entity_attrs_list=[]
attrs_list=[]
record_list=persistant.get_subset(entity_class, condition_string, persistant)
i=0
for record in record_list:
if i==0:
for data in record:
attrs_list.append(data)
elif i>1:
j=0
for data in record:
entity_attrs[attrs_list[j]]=data
j=j+1
new_instance=entity_class.clone()
new_instance.set_attrs(entity_attrs)
entity_subset.append(new_instance)
print(new_instance.attrs) #first print
i=i+1
for entity in entity_subset:
print(entity.attrs) #second print
return(entity_subset)
class Company(Entity):
def clone(self):
company=Company()
return company
class Entity:
def __init__(self):
self.attrs={}
def set_attrs(self, attrs):
self.attrs=attrs
這就是結果。
MacBook-Pro-de-Hugo:oop01 hvillalobos$ virtual/bin/python3 oop01.py
{'id': '1', 'razon_social': 'Attractora S.A. de C.V.', 'rfc': 'xxxxxxxx'}
{'id': '2', 'razon_social': 'Otra empresa sa de cv', 'rfc': ' yyyyyyyy'}
{'id': '3', 'razon_social': 'Una mas sa de vc', 'rfc': ' zzzzz'}
{'id': '3', 'razon_social': 'Una mas sa de vc', 'rfc': ' zzzzz'}
{'id': '3', 'razon_social': 'Una mas sa de vc', 'rfc': ' zzzzz'}
{'id': '3', 'razon_social': 'Una mas sa de vc', 'rfc': ' zzzzz'}
有沒有人知道爲什麼列表中的所有元素最後都有相同的內容? 謝謝大家
'self.attrs = attrs'不復制數據。你所有的實例都使用相同的'attrs'字典,因爲你對每個實例使用相同的字典來調用'set_attrs'。見https://nedbatchelder.com/text/names.html – user2357112
'self.attrs = attrs.copy()'可以幫助 –
任何改變任何可變對象的引用,將改變其所有引用。 – direprobs