인스턴스의 클래스의 컨텐츠 인스턴스가 참조 용 매개 변수로 전달 된리스트를 리턴하는 메소드를 작성하려고합니다. 목록의 모든 요소 (인스턴스)는 사전 인 속성 (인스턴스 변수)을 가지며 각 요소마다 내용이 달라야합니다. 문제는 사전에 올바른 내용으로 인스턴스가 제대로 만들어 졌을 때도 마찬가지입니다. , 반환 될 목록에 추가 될 때 목록에있는 인스턴스의 모든 사전 (attrs)은 동일한 내용을 갖습니다. 파이썬에서 객체 목록 사용하기
이
코드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' dict를 사용하고 있습니다. 왜냐하면 각 인스턴스에 대해 동일한 dict으로'set_attrs'를 호출했기 때문입니다. https://nedbatchelder.com/text/names.html을 참조하십시오. – user2357112
'self.attrs = attrs.copy()'도움이 될 수 있습니다 –
변경 가능한 객체 참조가 변경되면 참조가 모두 변경됩니다. – direprobs