我可以将python变量存储在另一个文件中的类中吗?

时间:2018-09-02 16:33:11

标签: python

我知道我可以使用pickle和open将变量存储在其他文件中,但是我想知道是否可以像这样
player.py:

class Ore():
    class Metal():
        Coal = 0
        Lead = 0
        Zinc = 0
        Iron = 0
        Tin = 0
        Gold = 0
        Gem = 0
    class Gas():
        Hydrogen = 0
        Oxygen = 0
        Nitrogen = 0
        Neon = 0
        Xenon = 0

然后在另一个文件中运行

import player
Ore.Metal.Coal = 1
print(Ore.Metal.Coal)

程序返回1,但此“ 1”存储在哪里?为什么在不带“ Ore.Metal.Coal = 1”行之后运行同一文件,它是否返回0?有没有一种方法可以通过在文件中存储1使它返回1?

感谢阅读

3 个答案:

答案 0 :(得分:1)

请注意,以下解释有些简化:

只要程序正在运行,您的变量就存储在计算机的RAM中。重新启动后,更改将丢失!

让我们看看为什么:您的程序基本上是一个文本文件,由python解释器读取并读取。 python将为每个变量分配一小部分RAM内存。只要您的程序正在运行,python就可以读取或写入该内存块。如果您访问变量,则会发生这种情况。

一旦您的代码“完成”了python,它将释放它分配的所有RAM。这样,其他进程可以使用RAM。您的变量将丢失。

您不应更改该过程。您的变量丢失的事实是有意的。但是仍然有存储数据的方法。

有几种方法可以做到这一点。阅读有关如何写入文件的Python文档。您可以构建一个类,该类在程序终止时记下所有这些值,并在再次启动时读取它们。一个简单的文本文件可能会做,或者您可以搜索将为您做的软件包。泡菜可能是一个开始,但是可能会有更好的方法来实现这一点。

或者,您可以构建一个函数,该函数可以在值更改时保存值。这会产生很多对硬盘的写/读访问,所以在执行此操作时要小心。

如果您想确保自己的游戏不受欺骗,可以考虑对统计信息进行编码,这样就无法使用文本编辑器进行编辑。

此外,我建议您阅读有关类的更多信息。目前,您在“矿石”类中使用了“气体”类,这有意义吗?煤气是矿石吗?

还,您想写下游戏中的每个项目吗?用字典来计算您的矿石怎么样?

还可以查看pygame。有点过时了,但是他们有可以帮助您的教程。

答案 1 :(得分:0)

首先,该变量将不会存储在文件中,因为该变量仅在解释期间存在。 “ Ore.Metal.Coal”是“ Ore.Metal”类的静态变量。 静态变量(无自身)是类和类实体的共享变量。 仅在更改“ Ore.Metal.Coal = 1”并且解释器停止解释代码之前,您将获得“ Ore.Metal.Coal = 1”。

因此,除非在另一个文件中的代码将'player.py'编辑为'Ore.Metal.Coal = 1',否则别无选择将1存储在文件中

答案 2 :(得分:0)

当导入python模块“ foo”时,纯文本“ foo.py”文件被解释为Python字节码并执行。文件范围“ foo.py”中的任何变量都可以作为名为“ foo”的python对象的成员进行访问。当另一个文件也要求导入“ foo”时,python只会为它提供现有的“ foo” python对象。假设解释器指向存储在内存中的现有“ foo”实例,则foo模块中的任何内容都可以由任何其他模块修改。

除非以不同的签名导入“ foo”,或者“ foo”显式为“ reloaded”,Python只会读取一次“ foo.py”。 foo实例是您所有修改过的代码-Python不会修改其源文件。如果要将更改存储在内存以外的其他内容中,则需要对其进行显式序列化和反序列化。泡菜就是这种界面的一个例子。您可以在the standard library中了解有关此内容的更多信息。