You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何存储类中变量值?使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 00:21:41