Я пытаюсь определить список как переменную экземпляра внутри класса, но он действует как переменная класса.Экземпляр класса Python и переменные класса
class THING:
def __init__(self, name, stuff):
self.name = name
self.dict = []
for item in stuff:
self.dict.append(item)
def getname(self):
return self.name
def getlist(self):
return self.dict
def inc_datecnt(self,date):
for item in self.dict:
if item.has_key(date):
item[date] += 1
list = []
dates=['July1,2015', 'July2,2015', 'July3,2015']
datecnts = []
for date in dates:
datecnts.append({date : 0})
list.append(THING('A', datecnts))
list.append(THING('B', datecnts))
for item in list:
print "\n", item.getname()
item.inc_datecnt('July1,2015')
for subitem in item.getlist():
print subitem
Когда я выполняю это я получаю:
A
{'July1,2015': 1}
{'July2,2015': 0}
{'July3,2015': 0}
B
{'July1,2015': 2}
{'July2,2015': 0}
{'July3,2015': 0}
Я, кажется, увеличивают словарный элемент одного класса для July1,2015, когда я хочу (и ожидать) будет увеличивая переменную экземпляра.
Помощь
Вы повторно 'datecnts' построить два экземпляр' THING', и в то время как вы создали новый список в 'dict' внутри один и то же между ними. – metatoaster
Возможно, вы можете напечатать тип (элемент), чтобы убедиться, что объект находится в ТО ВРЕМЯ, а не dict – ytpillai
Python не имеет способа распечатать его, поэтому вам нужно будет создать 'def __str __ (self)', если вы хочу просто распечатать переменную – ytpillai