gpt4 book ai didi

python - 如何使用 Pickle 加载类实例(初学者备份到 pickle jar 中)

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

我一直在浏览以前的答案,但尚未找到答案。我试图用 pickle 保存和加载类实例,但不断收到错误:类型对象“Foo”没有属性“bar”。我的代码如下:

class Char:
name = "undefined"

def __init__(self, race, str, int, dex, con, spd, mp_bonus):
self.race = race
self.exp = 0
self.lvl = 1
self.str = str
self.int = int
self.dex = dex
self.con = con
self.spd = spd
self.hp = (con + str) / 2
self.current_hp = self.hp
self.mp_bonus = mp_bonus
self.mp = (int * mp_bonus)
self.current_mp = self.mp

def save(self):
with open("save.pk1", "wb") as fp:
pickle.dump(self.__dict__, fp, protocol=pickle.HIGHEST_PROTOCOL)

def load():
with open('save.pk1', 'rb') as fp:
Char.__init__ = pickle.load(fp) # no idea what to put here
# or if it should be in the Char class or not

def options(dude):
cls()
print("OPTIONS")
print("_____________________")
print("s. Save Game")
print("l. Load Game")
print("x. Quit Game")
print("_____________________")
select = input("please type in the corresponding letter or number: ")

if select == "s":
Char.save(player)
cls()
print("Save Complete")
wait()
main(dude)
elif select == "l":
cls()
print("Load Complete")
wait()
main(dude)
elif select == "x":
exit_screen(dude)
else:
print("you chose the wrong key")
wait()
main(dude)

def main(dude):
#menu as written in options above
select = input("please type in the corresponding letter or number: ")

if select == "s":
stats(dude)
elif select == "i":
inventory(dude)
elif select == "1":
rand_enemy()
elif select == "o":
options(dude)
else:
print("you chose the wrong key")
wait()
main(dude)

def start_screen(char):
#menu as written in options above

select = input("Please type in the corresponding number: ")

if select == "1":
get_char(char)
elif select == "2":
load()
main(char)
elif select == "3":
exit()
else:
print("you chose the wrong key")
wait()
start_screen(char)

start_screen(Char)

所以我的主要问题是,当我尝试加载游戏时,它告诉我:AttributeError:类型对象“Char”没有属性“lvl”

虽然我无法理解 pk1 文件,但每次保存都会更新它,所以我知道保存功能正常工作。.我只是不确定如何获取 pk1 文件中的信息并将其替换为 Char .初始化

我正在考虑切换到 JSON,因为我已经在代码的其他部分实现了它..但我希望在这种情况下使用 pickle 让我的生活更轻松

最佳答案

你转储 self.dict 的方法对我来说看起来有点令人费解。转储 Char 类实例的常见方法如下:

class Char:
def save(self):
with open("save.pk1", "wb") as fp:
pickle.dump(self, fp, protocol=pickle.HIGHEST_PROTOCOL)

def load():
"""returns the saved instance of Char"""
with open('save.pk1', 'rb') as fp:
return pickle.load(fp)

为了清楚起见,我将添加上述类和方法的用法。

$ python -i 53796917.py
>>> c=Char()
>>> c.lvl = 10
>>> c.save()
>>>
$ python -i 53796917.py
>>> c=load()
>>> c.lvl
10

不抛出任何 AttributeError

关于python - 如何使用 Pickle 加载类实例(初学者备份到 pickle jar 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53796917/

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