Доступ к массиву и вложенным свойствам в Python - PullRequest
0 голосов
/ 30 апреля 2019

Извините, я искал и не смог найти ответ на этот вопрос - я знаю, что есть много тем и вопросов по этому поводу, но не вижу ответа.Пожалуйста, перенаправьте меня или, возможно, предложите решение!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 голосов
/ 30 апреля 2019
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
...