【问题标题】:Accessing and array and nested properties in Python在 Python 中访问和数组和嵌套属性
【发布时间】:2019-09-19 00:57:18
【问题描述】:

抱歉,我已经搜索过,但没有找到答案 - 我知道有很多相关的话题和问题,但看不到答案。请重定向我或提出解决方案! 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” 并想从与当前房间中所采取的方向相关的属性中检查/读取“锁定”属性。 currentRoom 是一个与其链接的 LIST 元素相关的整数。

请不要批评我缺乏构造函数。我试图使代码尽可能简单,稍后会介绍这些代码。

我的输入如下:

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

我使用下面这行代码来检查当前房间中是否存在所取的方向:

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

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

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

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

【问题讨论】:

  • 欢迎来到堆栈!您能否添加有关锁定属性检查如何不起作用(实际和预期行为)的信息?
  • 如果 lock 属性不是空字符串,我希望代码返回 True,但由于 move[1] 被评估为字符串而不是对象的属性,我会收到错误。跨度>

标签: python list class properties nested


【解决方案1】:
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

【讨论】:

  • 当然谢谢!我现在觉得很傻。我想设置属性的值会更复杂。
猜你喜欢
  • 2016-09-14
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-23
  • 1970-01-01
相关资源
最近更新 更多