Я преподаю, как написать основную игру в python (на основе текста - не используя pygame). (Примечание: я фактически не попал в «игровую» часть вперёд, потому что я хотел убедиться, что сначала у меня есть базовая структура ядра.)python load from shelve - могу ли я сохранить имя переменной?
Я нахожусь в точке, где я пытаясь выяснить, как я могу реализовать сценарий сохранения/загрузки, чтобы игровой сеанс мог оставаться за пределами функции подписки на программу. Я сделал немного поиска, и все, кажется, указывает на травление или стеллажи как лучшие решения.
Мой тестовый сценарий предназначен для сохранения и загрузки одного экземпляра класса. В частности, у меня есть класс Characters() и (для тестирования) экземпляр sigle этого класса, назначенный переменной pc. Экземпляры класса Character имеют атрибут под названием name, изначально установленный на «DEFAULT», но будет обновляться на основе ввода пользователем при начальной настройке новой игры. Для экс:
class Characters(object):
def __init__(self):
self.name = "DEFAULT"
pc = Characters()
pc.name = "Bob"
У меня тоже есть (или будет иметь) большое количество функций, которые относятся к различным инстанциям, используя переменные они asigned в. Например, составлен один в качестве упрощенного примера может быть:
def print_name(character):
print character.name
def run():
print_name(pc)
run()
Я планирую иметь функцию сохранения, которая будет упаковать экземпляр ПК (среди другой информации) с их текущей информацией (например: с обновленным имя). У меня также будет функция загрузки, которая позволит пользователю играть в сохраненную игру, а не запускать новую. Из того, что я прочитал, нагрузка может работать что-то вроде этого:
*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"]
Мой вопрос, есть ли способ для загрузки сукно «запоминать» имя переменной assotiated с экземпляром, и автоматически делать < < pc = mysave ["pc"] >> step? Или способ сохранить это имя переменной как строку (например, как ключ) и каким-то образом использовать эту строку для создания переменной с правильным именем (pc)?
Мне нужно «сэкономить» много экземпляров и может автоматизировать этот процесс с помощью цикла, но я не знаю, как автоматизировать разгрузку для определенных имен переменных. Действительно ли я должен повторно назначать каждого отдельно и явно? Мне нужно назначить экземпляры обратно к соответствующим именам переменных bc. У меня есть куча основных функций, которые относятся к конкретным экземплярам с именами переменных (например, пример, приведенный выше).
Идеи? Возможно ли это, или есть совершенно другое решение, которое я не вижу?
Спасибо!
~ ребра
Ну, очевидное решение не имеет так много переменных, толкает большинство данных в структуры данных, на которые ссылаются некоторые переменные. – delnan
Достаточно честный. Я попробую провести реструктуризацию, поэтому у меня есть более общие переменные, ссылающиеся на ... словари, содержащие различные экземпляры. (Вот почему я хотел получить основную структуру до инвестирования времени в создание персонажа/комнаты/etc). - Я полагаю, по вашему мнению, что сохранение переменных невозможно или не рекомендуется/не лучшее решение? – ribs
Есть очень мало вещей, которые невозможны, но такого рода вещи обычно нецелесообразны. Причины отчасти догматы, отчасти страх перед возможными (но не гарантированными) последствиями, а отчасти это почти всегда лучший способ. – delnan