gpt4 book ai didi

Python 类实例与类变量

转载 作者:太空宇宙 更新时间:2023-11-03 17:34:55 26 4
gpt4 key购买 nike

我试图将列表定义为类中的实例变量,但它充当类变量。

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 日增加了一个类字典元素。

帮助

最佳答案

当您将 datecnts 列表传递给 THING 对象的构造函数时,您只是传递引用(列表是可变的,字典是可变的),因此如果您对 A THING 对象的字典的任何更改都会反射(reflect)在 B 中,因为 B 也具有相同的引用。您应该尝试对 datecnts 执行 copy.deepcopy 并将其分别发送到 AB

示例 -

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

关于Python 类实例与类变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31331482/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com