Как получить доступ к переменным экземпляра из классов в других файлах? - PullRequest
1 голос
/ 13 мая 2019

Я пытаюсь получить доступ к переменным экземпляра из класса, который находится в файле с именем quest.py.

В текущем файле room.py я пытаюсь выполнить логическое выражение между переменными каждого класса, но каждый раз, когда я пытаюсь вызвать переменную в файле quest.py, он просто говорит, что у меня естьеще не определено.

Однако у меня есть отдельный файл с именем simulation.py, который импортирует все эти файлы и создает объекты для этих классов, и это файл, который я запускаю.

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

Но это описание меняется в зависимости от того,в этой комнате квест не был выполнен.

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

Есть идеи ??В конечном итоге я пытаюсь запустить эту функцию рисования.

Я не могу написать какой-либо код вне классов в этих отдельных файлах.Большая часть этого кода должна быть в файле симуляции.

room.py:

class Room
    def __init__(self, name):
        """Initialises a room. ."""
        self.name = name
        self.north = "N" ##Exits...
        self.south = "-"
        self.east = "|"
        self.west = "|"
    def get_short_desc(self):
        desc = 'There is nothing in this room.'
        if q.get_room_name() == self.name:
            if q.quest_complete == True:
                desc = self.after
            elif q.quest_complete == False:
                desc = self.before
        return desc
    def draw(self):
        """ Creates a drawing depicting the exits in each room."""
        print("+---------{}{}---------+".format(self.north,self.north))
        print("|                    |")
        print("|                    |")
        print("|                    |")
        print("|                    |")
        print("{}                    {}".format(self.east,self.west)) ## The list of east and west changes depending on the room
        print("|                    |")
        print("|                    |")
        print("|                    |")
        print("|                    |")
        print("+---------{}{}---------+".format(self.south,self.south))
        print("You are standing at the {}.".format(self.name)) # the name of the room
        desc = r.get_short_desc()
        print(desc)
        return self.name

quest.py:

class Quest

    def __init__(self, reward, action, desc, before, after, req, fail_msg,           pass_msg, room):
        """ Initialises a quest."""
        self.reward = reward
        self.action = action
        self.desc = desc
        self.before = before
        self.after = after
        self.req = req
        self.fail_msg = fail_msg
        self.pass_msg = pass_msg
        self.room = room
        self.quest_complete = False
    def get_room_name(self):
        return self.room  #so i can access the instance variable of "room" in other classes

Предыдущий код импортируется вфайл Simulation.py, который запускается:

    from room import Room
    from quest import Quest
    r = Room(rooms[3]) ##one room example
    q = Quest(quest_list[0][0],quest_list[0][1],quest_list[0][2],quest_list[0][3],quest_list[0][4],quest_list[0][5],quest_list[0][6],quest_list[0][7],quest_list[0][8]) ##i have already created a list containing quests, this is just one quest example
    r.draw()

Ожидаемый результат:

    +---------NN---------+
    |                    |
    |                    |
    |                    |
    |                    |
    |                    |
    |                    |
    |                    |
    |                    |
    |                    |
    +--------------------+
    You are standing at the Entrance.
    There is nothing in this room

Возвращает строку, содержащую краткое описание комнаты.Это описание изменяется в зависимости от того, был ли выполнен соответствующий квест в этой комнате.Если нет квестов, имеющих отношение к этой комнате, это должно вернуть: There is nothing in this room. Я получаю ошибку:

"" Вы стоите у входа.

Traceback(последний вызов был последним): файл "simulation.py", строка 1, из комнаты импорта комнаты

Файл "/home/andrewb/Documents/vscode.py/Adventure_Scaffold/room.py", строка 89, в r.draw ()

Файл "/home/andrewb/Documents/vscode.py/Adventure_Scaffold/room.py", строка 72, в рисовании desc = r.get_short_desc ()

Файл "/home/andrewb/Documents/vscode.py/Adventure_Scaffold/room.py", строка 20, в get_short_desc, если q.get_room_name () == self.name: NameError: name 'q' не определено ""

...