gpt4 book ai didi

python - 如何在 python 中使用 pickle 保存带有列表的对象?

转载 作者:太空宇宙 更新时间:2023-11-03 21:41:04 25 4
gpt4 key购买 nike

我正在尝试使用另一个类对象的列表来保存对象。

    def loadBot(self, name):

BotFile = open('../Bots/' + name, 'rb+')

self.CurrentBot = pickle.load(BotFile)

BotFile.close() # Closes file

def saveBot(self, bot):

BotFile = open('../Bots/' + bot.Name, 'wb+')

BotFile.truncate() # Clear File
pickle.dump(bot, BotFile, protocol=pickle.HIGHEST_PROTOCOL)

BotFile.close() # Close file

这些是我用来加载对象和保存的函数。在对象机器人中,我有对象“蓝图”列表和功能添加蓝图。

    class ChatBot:

Name = 'DefaultName'
Token = 'DefaultToken'
bot_blueprints = []

def __init__(self, Name, Token):
self.Name = Name
self.Token = Token

def addBlueprint(self):
self.bot_blueprints.append(Blueprint(len(self.bot_blueprints)))

我正在添加新元素并在保存之前和之后检查列表大小

app.loadBot('A')
print(len(app.CurrentBot.bot_blueprints))
app.CurrentBot.addBlueprint()
app.saveBot(app.CurrentBot)
print(len(app.CurrentBot.bot_blueprints))

它从0开始,添加bp后变成1。之后我关闭应用程序,第二次启动它,我的代码应该在打开后写入1,添加后写入2,但它仍然是0和1。文件大小不断增长,但pickle可以无法正确加载我的文件。

最佳答案

您编写代码的方式 bot_blueprints 是类级别变量,而不是实例级别变量。因此整个程序中只有一个,而不是每个 ChatBot

我会重新安排类(class),使其更像:

class ChatBot:
def __init__(self, name, token):
self.name = name
self.token = token
self.bot_blueprints = []

def addBlueprint(self):
self.bot_blueprints.append(Blueprint(len(self.bot_blueprints)))

关于python - 如何在 python 中使用 pickle 保存带有列表的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52861767/

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