Могу ли я использовать переменные из main.py в других файлах? - PullRequest
1 голос
/ 29 марта 2020

Я делаю текстовую приключенческую игру, которую я планирую сделать довольно долгой. Естественно, вместо того, чтобы иметь весь код в main.py, я решил разделить главы на разные файлы для запуска в if блоках в соответствии с выбором, который делает игрок. Небольшая проблема, однако: вся пользовательская информация, которую я использую для настройки истории (имя, пол, одежда и т. Д. c.), Хранится в main.py. Итак, если у меня есть другой файл (скажем, option3.py, например), и я пишу что-то вроде

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

, у меня нет user_name, сохраненного в option3.py. Я бы предпочел не импортировать указанные c переменные в каждый из 20+ файлов каждый раз, но я слышал, что совместное использование пространства имен - плохая идея, поэтому мне интересно, есть ли лучший способ обойти это.

Дополнительно: Я также хотел бы включить какую-то функцию инвентаризации предметов, но я не уверен, как go узнать об этом, что с этой проблемой с несколькими файлами и фактом что инвентарь часто будет меняться

Ответы [ 2 ]

2 голосов
/ 29 марта 2020

Лучше всего использовать классы и импортировать их. Если вы создали класс с именем User и поместили в него все необходимые атрибуты, вы можете импортировать его.

Например, создать файл user.py:

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

Затем, где бы вы ни находились в своей основной игре l oop, вы можете сделать from user import User.

Таким образом, вы можете создать новый пользовательский объект с user1 = User('SomeName', 'F', 'Skirt') и получить доступ к таким атрибутам, как это: print(user1.name)

0 голосов
/ 29 марта 2020

Вы можете сделать что-то подобное, если не хотите загрязнять пространство имен.

game_variables.py

cat = 12
dog = 24

main.py

import game_variables as gv

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

Но я думаю, вы упускаете из виду тот факт, что игровые состояния должны быть общими для всех модулей, в этом случае вам необходимо создать глобальные переменные. Но это может привести к разного рода противоречиям.

Вместо этого лучше создать класс для каждого модуля в вашем проекте и передавать состояния объекта с помощью метода get и set между несколькими файлами.

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)

...