我成功地将一个键列表打印到屏幕上,然后要求用户键入一个键名来获取特定对象。这是我认为它的工作方式:
print dict['bob']
这将输出用'bob'键存储的对象,但它不会。我假设这个问题出现是因为我存储对象而不是字符串或整数。如果输入的名称是一个键,它只会再次打印名称而不是对象,如果它不是键,则会抛出错误。最终结果是获取指定的对象,以便用户可以查看对象属性。
当上面的语句运行时,它只是将键打印到屏幕上:
bob
打印我的字典看起来像这样
{'Sal': <Employ_Class2.Employee object at 0x01EE38F0>, 'bob': <Emplo
y_Class2.Employee object at 0x01EE3930>, 'jack': <Employ_Class2.Employee o
bject at 0x01EE3990>, 'alexa': <Employ_Class2.Employee object at 0x01EE3870>,
'dave': <Employ_Class2.Employee object at 0x01EE3910>, 'sew
': <Employ_Class2.Employee object at 0x01EE3950>, 'tam': <Employ_Class2.Em
ployee object at 0x01EE39D0>}
答案 0 :(得分:0)
如果要查看对象属性的名称,请使用dir()
。
如果字典包含您创建的类的实例,并且您想要从这些对象中提取相关信息,则需要在您的类中创建一个函数,该函数执行该操作并稍后调用它。
假设您有Product
类型的对象,因为Product
是您创建的类。您可以在词典中存储多个产品。你想要什么回来?产品名称?名称,价格和描述?或者也许是班级名字? Python无法弄清楚你的意图,因此你需要创建一个特定的方法来完成你想做的事情,或者使用__str__()
。
答案 1 :(得分:0)
我认为你想要的是dir([object])
。
Without arguments, return the list of names in the current local scope. With an argument, attempt to return a list of valid attributes for that object.
因此,根据文档,您可以使用dir()
来获取该对象的属性。
希望这是你想要的......
答案 2 :(得分:0)
看起来你只是被print obj
打印调用对象的__str__
或__unicode__
方法的结果所误导。因此,当转换为字符串时,键“bob”下的字典中的对象只是“bob”。
正如其他人所说,如果您只是想在该键下打印对象的属性,请使用dir
:
obj = dict['bob']
print dir(obj)
答案 3 :(得分:0)
不确定您是引用您在类定义中定义的对象属性,还是使用dir().
找到的名称。在任何一种情况下,如果您的对象类具有__str__
或{{1定义的方法,在使用print时将调用这些方法。如果您希望用户能够在对象空间中查看名称,请使用__repr__
。如果您希望它们访问您在类定义中设置的属性和属性,请直接访问它们(或者通过您创建的任何方法来访问它们:
dir()
导致class Test:
attr = 'item' # this is a class attribute
def __init__(self):
self.name = 'Me' # this will be an instance variable/property
def __str__(self):
return self.name
d = {} # example does not need a dict but using one to relate to posted question
d['item'] = Test()
print(d['item'])
被打印到屏幕:
self.name
将打印出对象命名空间中的所有名称,包括方法和属性。
要打印您创建的属性(上面为dir(d['item'])
和attr
),您只需执行以下操作:
self.name
因此,在这种情况下,您的用户应该直接访问dict对象:print(d['item'].attr)
print(d['item'].name)
希望有道理。