在Python中,如果我知道它的标识符,如何访问对象属性?

时间:2015-10-29 10:15:23

标签: python

这是一个简单的类:

class Daz:
    def __init__ (self, vName, vValue):
        self.Name = vName
        self.Value = vValue

我可以创建一个类的实例,因此添加到字典中:

dictOfDaz = []
dictOfDaz.append(Daz('Obj1',25))
dictOfDaz.append(Daz('Obj2',35))

所以,我现在想要访问我知道名字的一个实例的vValue属性。

在伪代码中:

Get vValue from instance of Daz where Daz.Name == 'Obj1'

我不想遍历字典,因为我知道我需要引用和必须执行的特定对象名称

for d in dictOfDaz:
  if d.Name == 'Obj1' or d.Name == 'Obj2':
    do_this

对我来说似乎效率低下。

更新 在列表和字典之间混淆了,解决方案(正如汤姆和其他人指出的那样)如下:

class Daz:
    def __init__ (self, vName, vValue):
        self.Name = vName
        self.Value = vValue

dictOfDaz = {}

dictOfDaz['Obj1'] = Daz('Obj1',25)
dictOfDaz['Obj2'] = Daz('Obj2',35)
dictOfDaz['Obj3'] = Daz('Obj3',45)
dictOfDaz['Obj4'] = Daz('Obj4',55)

这允许我通过以下方式访问实例的值:

print getattr(dictOfDaz['Obj1'], 'Value')

完美地解决了我的问题!

1 个答案:

答案 0 :(得分:1)

在您的示例中,您使用的是列表,而不是字典。如果您使用由Name编制索引的真正的dict,那么您可以按名称查找对象:

dictOfDaz = {}

daz = Daz('Obj1',25)
dictOfDaz[daz.Name] = daz

daz = Daz('Obj2',35)
dictOfDaz[daz.Name] = daz

现在您可以参考dictOfDaz['Obj1']dictOfDaz['Obj2']