如何从其他文件中的类访问实例变量?

时间:2019-05-13 02:54:21

标签: python class inheritance instance-variables

我正在尝试从名为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.我收到的错误是:

  

“”“您正站在入口处。

     

回溯(最近一次通话最后一次):文件“ 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:未定义名称'q'“”

0 个答案:

没有答案