我有一个学校的项目中,我们正在制定自定义文本为基础的数据库。你知道吗
我有这个功能:
def setRecord(self,mySliceRecord):
print("In setRecord :",mySliceRecord.record)
self.readDB()
print("In setRecord after reading:",mySliceRecord.record)
if self.dbSchema.dbIndex:
self.dbData[mySliceRecord.record[self.dbSchema.dbIndex]] = mySliceRecord
else:
self.dbData.append(mySliceRecord)
return True
由此调用readDB(),即:
def readDB(self):
dictCounter = 0
if self.dbSchema.dbIndex:
self.dbData = dict()
else:
self.dbData = list()
file = open(self.dbName+'.apd')
for line in file:
counter = 0
splittedLine = line.split("|")
sliceRecord = SliceRecord(self.dbSchema.schema)
for item in splittedLine:
if item:
sliceRecord.record[self.dbSchema.schemaList[counter]] = item.strip()
counter += 1
if self.dbSchema.dbIndex:
self.dbData[sliceRecord.record[self.dbSchema.dbIndex]] = sliceRecord
else:
self.dbData.append(sliceRecord)
现在发生的事情不知何故,mySliceRecord
在setRecord()
被修改。这是我的类SliceRecord()
的一个自定义对象,它有两个orderedDicts
。你知道吗
print语句的输出如下:
在setRecord
:OrderedDict([('Name', 'asdklajsweq'), ('Age', 123), ('Email', 'asdasqweqwe')])
在setRecord
阅读后:OrderedDict([('Name', ''), ('Age', '18'), ('Email', 'asdasd')])
在self.readDB()
调用之后显示的dict实际上是文本文件中的最后一条记录。你知道吗
它可能与绑定有关,但我不明白的是mySliceRecord
变量名在其他地方没有使用。感谢您的帮助。:)
更新:我的readDB()
方法也没有按预期工作,所有记录都显示相同的数据。你知道吗
读取文件后self.dbData
的输出:
Record : OrderedDict([('Name', 'Hello'), ('Age', '20'), ('Email', 'Next')])
Record : OrderedDict([('Name', 'Hello'), ('Age', '20'), ('Email', 'Next')])
在文件中我有两个不同的记录,这里重复的记录是文件中的最后一个记录。我没有正确理解内存分配和复制。:—|
PS:别揍我,我只是第二次用python编写代码。你知道吗
你在改变
readDB()
中mySliceRecord
的状态。Python对象是引用,这意味着传递给其他函数的可变对象可以被修改,即使变量本身没有被设置。如果您将mySliceRecord
添加到self.dbData
,从readDB()
中的self.dbData
读回它,并对其进行修改,您将看到setRecord
中的修改。你知道吗简单示例:
所以我找到了解决方案,问题实际上是在SliceRecord类实现中,我从来没有在init中初始化dict(),而是直接在类中初始化,因此我有一种静态类变量。我知道我很蠢。:-(
相关问题 更多 >
编程相关推荐