#python #dictionary
#python #словарь
Вопрос:
изначально моя программа была такой:
inst = {}
class IContainer:
dicList = {}
for i in range(10):
inst[i] = IContainer()
def FindEnd(node):
if node.text != None:
inst[counter].dicList[node.tag] = node.text
else:
for subNode in node:
FindEnd(subNode)
counter = 0
for element in root:
if element.tag == "Items":
for subE in element:
if subE.tag == "Item":
for subSubE in subE:
FindEnd(subSubE, counter)
counter = 1
это работает просто отлично, я смог разобрать материал в словаре, вместо этого я хочу создать список динамически.
итак
counter = 0
for element in root:
if element.tag == "Items":
for subE in element:
if subE.tag == "Item":
inst[counter] = IContainer()
for subSubE in subE:
FindEnd(subSubE)
for i in range(len(inst)):
print inst[i]
print inst[i].dicList
counter = 1
Когда я запускаю это
for i in range(len(inst)):
print inst[i]
print inst[i].dicList
все inst заменяются адресом и данными конечного цикла….Я понятия не имею, что происходит не так.
Ответ №1:
dicList
является атрибутом класса.
class IContainer:
def __init__(self):
self.dicList = {}
Ответ №2:
В вашем случае, dicList
это атрибут класса, в котором вам нужен атрибут экземпляра.
Атрибуты класса имеют только один объект для ссылки (именно по этой причине вы получаете эти результаты), тогда как атрибуты экземпляра создаются при создании экземпляра, поэтому каждый экземпляр ссылается на свой собственный dicList
.
Итак, вы хотите использовать атрибуты экземпляра, чего вы можете достичь, создав указанный атрибут в конструкторе.
class IContainer:
def __init__(self):
self.dicList = {}