Я пытаюсь получить доступ к переменным экземпляра из класса, который находится в файле с именем 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' не определено ""