首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python load from shelve -我可以保留变量名吗?

python load from shelve -我可以保留变量名吗?
EN

Stack Overflow用户
提问于 2013-05-31 06:29:13
回答 1查看 620关注 0票数 0

我正在自学如何用python写一个基本的游戏(基于文本-不使用pygame)。(注意:我实际上还没有讲到“游戏”部分,因为我想确保我首先弄清楚了基本的核心结构。)

我正试图弄清楚如何实现保存/加载场景,以便游戏会话可以在程序的单一运行之后继续存在。我做了一些搜索,似乎所有的东西都指向酸洗或搁置是最好的解决方案。

我的测试场景是保存和加载类的单个实例。具体地说,我有一个名为Characters()的类,并且(出于测试目的)将该类的一个实例赋给了一个名为pc的变量。Character类的实例具有一个名为name的属性,该属性最初设置为"DEFAULT",但将根据用户在初始设置新游戏时的输入进行更新。对于ex:

代码语言:javascript
复制
class Characters(object):
    def __init__(self):
        self.name = "DEFAULT"

pc = Characters()
pc.name = "Bob"

我还有(或将要有)大量的函数,它们使用赋值给它们的变量引用各种实例。例如,作为简化示例,虚构的示例可能是:

代码语言:javascript
复制
def print_name(character):
    print character.name

def run():
    print_name(pc)

run()

我计划有一个保存功能,将打包的pc实例(在其他信息中)与他们的当前信息(例如:与更新的名称)。我还将有一个加载功能,将允许用户玩一个保存的游戏,而不是开始一个新的。据我所知,加载可能是这样的:

代码语言:javascript
复制
*assuming info was saved to a file called "save1"
*assuming the pc instance was shelved with "pc" as the key

import shelve

mysave = shelve.open("save1")
pc = mysave["pc"]

我的问题是,是否有办法让搁置加载“记住”与实例关联的变量名称,并自动执行<< pc = mysave"pc“>>步骤?或者让我将变量名存储为字符串(例如,作为键),并以某种方式使用该字符串创建具有正确名称的变量(pc)?

我将需要“保存”大量实例,并且可以通过循环自动执行该过程,但我不知道如何自动卸载到特定的变量名。我真的需要逐个明确地重新指定每一个吗?我需要将实例赋值回适当的变量名bc。我有一堆核心函数,它们使用变量名引用特定的实例(就像我上面给出的例子)。

想法?这是可能的吗,还是有一种我看不到的完全不同的解决方案?

谢谢!

~排骨

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-05-31 08:23:05

当然,做这样的事情是可能的。因为工具架本身就像一个字典,所以只需将所有字符实例保存在一个实际的字典实例中,并使用它们的变量名作为键。例如:

代码语言:javascript
复制
class Character(object):
    def __init__(self, name="DEFAULT"):
        self.name = name

pc = Character("Bob")

def print_name(character):
    print character.name

def run():
    print_name(pc)

run()

import shelve
mysave = shelve.open("save1")
# save all Character instances without the default name
mysave["all characters"] = {varname:value for varname,value in
                                globals().iteritems() if
                                    isinstance(value, Character) and
                                    value.name != "DEFAULT"}
mysave.close()

del pc

mysave = shelve.open("save1")
globals().update(mysave["all characters"])
mysave.close()

run()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16846868

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档