在Python中访问数组和嵌套属性

时间:2019-04-30 11:10:01

标签: python list class properties nested

对不起,我已经搜索过并且没有设法找到答案。我知道有很多与此相关的话题和问题,但看不到答案。请重定向我,或者提出解决方案! TIA

我有一个对象数组。 该数组中对象的一个​​(实际上是4个)属性是另一个类。

从用户处获取的输入引用数组中的一个属性,该属性包含另一个类的实例。我只想读取这些数据。

class direction():
    dest = -1
    lock = ''
class room():
    roomname = ''
    desc = ''
    n = direction()
    s = direction()
    w = direction()
    e = direction()
    item = ''

rooms = []
rooms.append( room() )
rooms.append( room() )
rooms.append( room() )
rooms.append( room() )
rooms.append( room() )

rooms[0].roomname = 'outside'
rooms[0].desc = ''
rooms[0].n.dest = 'bathroom'
rooms[0].item = ''

rooms[1].roomname = 'hall'
rooms[1].desc = 'The hallway has doors to the east and south'
rooms[1].s.dest = 2
rooms[1].e.dest = 3
rooms[1].item = ''

,依此类推。 现在,我从用户那里获取输入,例如:“ go n” 并希望从与当前房间中所采取的方向相关的属性中检查/读取“ lock”属性。 currentRoom是与其链接到的LIST元素有关的整数。

请不要批评我缺乏构造函数。我试图使代码最初尽可能地简单,并将在以后介绍。

我输入如下:

print('Your action:')
move = input('>>>').lower().split()

我使用以下代码行来检查所采取的方向是否在当前房间中存在,如下所示:

if getattr(rooms[currentRoom], move[1]) != '':

,然后要检查当前房间中给定方向的锁属性。像这样的东西(不起作用)

if rooms[currentRoom].move[1].lock != '':

我希望这足够清楚!非常感谢。

1 个答案:

答案 0 :(得分:0)

if rooms[currentRoom].move[1].lock != '':

因为move[1]是一个字符串,所以此行代码无效。如果要访问类中的变量,则必须在代码行中调用它

if rooms[currentRoom].n.lock != '':

一种解决方案是获取存储在对象中的值,如下所示

x = getattr(rooms[currentRoom], move[1]) #getattr() returns direction() object

if x.lock != '': #check lock value in direction() object