For loop with object's attributes in Python
我使用的是Python中的对象,我只想替换for循环中的属性以从对象中获取数据。这是我的代码:
1 2 3 4 5
| def calculate_something(dictionaryWithObjects):
for attribute in ['attr1', 'attr2', 'attr3']:
dataA1, dataA2 = dictionaryWithObjects['Object1'].attribute
dataB1, dataB2 = dictionaryWithObjects['Object2'].attribute
dataC1, dataC2 = dictionaryWithObjects['Object3'].attribute |
所以这或多或少是我想要的。之后我将使用这些数据进行计算。但它给出了一个错误,即对象没有名为".attribute"的属性。当然不是,我是想把里面的"ATTR1"换掉。
我做错什么了?
- take a look at getattr setattr(docs.python.org / / 3 /图书馆/ functions.html # setattr)
- 你寻找getattr,getattr(dictionary['Obj1'], attribute)
- .attributethere is not a variable,知道You can not that replace with the real变量在你的attributefor循环。
- 因为你是学习,工作getattrYou have the盎司,什么发生如果你[]remove the names from the series of the for在属性?
- possible get()样重复of a method for for Python属性检查
为了通过实例属性的名称访问它,您应该使用:getattr(object,name[,default]),例如:
1
| dataA1, dataA2 = getattr(dictionaryWithObjects['Object1'], attribute) |
- DictionaryWithObjects.get("object1",attribute)是否与u answered相同?
- @罗山:是的,但这不是问题的一部分,我不想把答案过于复杂。
- @罗山:直到现在我才明白你的第一句话是什么意思。我以为是用get方法取代了[]。
您可以使用eval:
1
| data=eval('Object1.'+attribute) |
- 不起作用(在问题的背景下),但即使它起作用,这也是最丑陋和可避免的方法之一。
- 意识到它是丑陋的,好奇为什么它不起作用?
- 因为您的代码片段不适合问题上下文(没有"obj")。
- 我已经改变了它,但是so问题的重点是为将来的用户解决问题,所以完全特定于上下文是没有意义的。
尝试如下操作:
1 2 3
| def calculate_something(dictionaryWithObjects):
for attribute in ['attr1', 'attr2', 'attr3']:
dataA1, dataA2 = dictionaryWithObjects['Object1'][attribute] |
- 这不起作用,因为属性不是键。它是一个物体。我在乞讨中试过了)
- 那么你能粘贴dir(dictionarywithobjects)和dir(dictionarywithobjects["object1"]的结果吗?这实际上有助于让你的循环超过你的任何东西。
- @Nooraliajafri你一般想用vars而不是dir,但是如果你能只使用getattr,你为什么要这样做?
- @我让她知道使用python的cli和dir(yourobject),以便更好地了解变量。就是这样:D