我可以在其他文件中使用main.py中的变量吗?

2024-04-19 00:42:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在做一个基于文本的冒险游戏,我打算玩很长时间。当然,我没有把所有的代码都放在main.py中,而是决定根据玩家的选择将章节分割成不同的文件,在if块中运行。然而,有一个小问题:我用来定制故事的所有用户信息(姓名、性别、服装等)都存储在main.py中。 所以,如果我有另一个文件(比如说option3.py),我写的是

print(f"{user_name} walked down the street.")

我没有user_name存储在option3.py中。我不希望每次都将特定的变量导入到20多个文件中,但我听说共享名称空间是个坏主意,所以我想知道是否有更好的方法来解决这个问题

额外:我还想加入某种物品库存功能,但我不确定如何实现这一点,因为这是一个多文件问题,而且库存经常会发生变化


Tags: 文件代码用户namepy文本ifmain
2条回答

最好是使用类并导入它们。如果您创建了一个名为User的类,并将所有必要的属性放入该类中,则可以导入该类

例如,创建user.py文件:

class User():
  def __init__(self, name, gender, clothing):
    self.name = name
    self.gender = gender
    self.clothing = clothing

然后,无论主游戏循环在哪里,都可以执行from user import User

这样,您就可以使用user1 = User('SomeName', 'F', 'Skirt')创建一个新的用户对象,访问属性如下:print(user1.name)

如果不想污染名称空间,可以这样做

game_variables.py

cat = 12
dog = 24

main.py

import game_variables as gv

print(gv.cat)
print(gv.dog)

但是,我认为您忽略了一点,即游戏状态必须在所有模块之间共享,在这种情况下,您需要创建全局变量。但是,这可能导致各种不一致

相反,最好为设计中的每个模块创建一个类,并使用getter和setter在多个文件之间传递对象状态

cat.py

class cat:
  def __init__(self):
    self.cuteness = 100
    pass
  def get_state(self):
    return self.cuteness
  def set_state(self, val):
    self.cuteness = val

update.py

def update(state):
   # some calculation
   return state + 1

main.py

import update
import cat

my_cat = cat.cat()
updated_cat_cuteness = update.update(my_cat.get_state())
my_cat.set_state(updated_cat_cuteness)

相关问题 更多 >