Python类实例与类变量

2024-10-02 12:24:31 发布

您现在位置: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}

我似乎在为2015年7月1日递增一个类字典元素,而我希望(并期望)递增一个实例变量。你知道吗

救命


Tags: nameinselffordatedefitemdict
1条回答
网友
1楼 · 发布于 2024-10-02 12:24:31

当您将datecnts列表传递给THING对象的构造函数时,您只是传递引用(列表是可变的,dict是可变的),因此如果您对A对象的dict进行任何更改,它将反映在B,因为B也有相同的引用。你应该尝试做copy.deepcopydatecnts,然后分别发送给AB。你知道吗

示例-

import copy
list.append(THING('A', copy.deepcopy(datecnts)))
list.append(THING('B', copy.deepcopy(datecnts)))

相关问题 更多 >

    热门问题