如何存储类中变量值?使用pickle库未生效求解决方案
玩家数据保存与加载解决方案
一、修正Pickle用法并解决核心问题
你之前用Pickle没效果,大概率是因为Player类的属性都是类属性,而非实例属性。类属性属于类本身,Pickle保存实例时只会存储实例独有的属性,不会保存类属性的修改。先把类改成实例属性模式:
class Player(): def __init__(self): self.money = 0 self.level = 0 self.xp = 0 self.xp_until_level = 20 self.taxi_car = "Cabbie" self.busines = "No" self.busines_income = 1000 self.upgrade_cost = 10000 self.car_speed = 10 self.car_level = 0 self.drives_until_new_car = 20 p = Player()
之后用Pickle正确保存和加载实例:
保存数据
import pickle # 假设已修改玩家数据,比如 p.money = 5000 with open("player_save.pkl", "wb") as save_file: pickle.dump(p, save_file)
加载数据
import pickle try: with open("player_save.pkl", "rb") as save_file: p = pickle.load(save_file) except FileNotFoundError: # 无存档时创建新玩家 p = Player()
二、替代方案:用JSON保存(更通用可读)
如果担心Pickle的Python兼容性问题,可改用JSON格式,可读性更强且跨语言通用:
给Player类添加序列化/反序列化方法
import json class Player(): def __init__(self): self.money = 0 self.level = 0 self.xp = 0 self.xp_until_level = 20 self.taxi_car = "Cabbie" self.busines = "No" self.busines_income = 1000 self.upgrade_cost = 10000 self.car_speed = 10 self.car_level = 0 self.drives_until_new_car = 20 # 实例转字典 def to_dict(self): return self.__dict__.copy() # 字典转实例 @classmethod def from_dict(cls, data): player = cls() player.__dict__.update(data) return player
保存数据
with open("player_save.json", "w") as save_file: json.dump(p.to_dict(), save_file, indent=4)
加载数据
try: with open("player_save.json", "r") as save_file: save_data = json.load(save_file) p = Player.from_dict(save_data) except FileNotFoundError: p = Player()
内容的提问来源于stack exchange,提问作者Ripper
相关产品推荐
相关产品推荐

