【问题标题】:Python iterating through object attributes [duplicate]Python遍历对象属性[重复]
【发布时间】:2014-09-28 19:57:58
【问题描述】:

如何在 Python 中迭代对象的属性?

我有一堂课:

class Twitt:
    def __init__(self):
        self.usernames = []
        self.names = []
        self.tweet = []
        self.imageurl = []

    def twitter_lookup(self, coordinents, radius):
        cheese = []
        twitter = Twitter(auth=auth)
        coordinents = coordinents + "," + radius
        print coordinents
        query = twitter.search.tweets(q="", geocode=coordinents, rpp=10)
        for result in query["statuses"]:
            self.usernames.append(result["user"]["screen_name"])
            self.names.append(result['user']["name"])
            self.tweet.append(h.unescape(result["text"]))
            self.imageurl.append(result['user']["profile_image_url_https"])

现在我可以通过以下方式获取我的信息:

k = Twitt()
k.twitter_lookup("51.5033630,-0.1276250", "1mi")
print k.names

我希望能够像这样在 for 循环中迭代属性:

for item in k:
   print item.names

【问题讨论】:

  • 什么属性?你的意思是超过'k'属性?
  • 我可能在这里没有使用正确的术语,但是是的,我希望能够在某种对象中返回我的用户名、推文等,我可以单独遍历它们。像这样:对于 twitter 打印 item.usernames 中的项目。类似的东西。
  • 试试我的答案,看看是否适合你。

标签: python python-2.7 object for-loop


【解决方案1】:

更新

对于 python 3,您应该使用 items() 而不是 iteritems()

Python 2

for attr, value in k.__dict__.iteritems():
        print attr, value

Python 3

for attr, value in k.__dict__.items():
        print(attr, value)

这将打印出来

'names', [a list with names]
'tweet', [a list with tweet]

【讨论】:

  • k.iteritems() 在 Python3 中被移除,使用 k.items() 代替。
  • @trdavidson 我添加了注释。
  • 在 python3 中也是新的,打印操作需要括号。
  • 隐藏__dict__方法非常有用!此外,要作为字典返回,请使用字典理解 print({attr:value for attr, value in k.__dict__.iteritems()})
  • 我在一个继承自另一个对象的对象上尝试了这个,它只返回了属于基类的属性。
【解决方案2】:

您可以使用标准的 Python 习语,vars()

for attr, value in vars(k).items():
    print(attr, '=', value)

【讨论】:

    【解决方案3】:

    在python中遍历对象属性:

    class C:
        a = 5
        b = [1,2,3]
        def foobar():
            b = "hi"    
    
    for attr, value in C.__dict__.iteritems():
        print "Attribute: " + str(attr or "")
        print "Value: " + str(value or "")
    

    打印:

    python test.py
    Attribute: a
    Value: 5
    Attribute: foobar
    Value: <function foobar at 0x7fe74f8bfc08>
    Attribute: __module__
    Value: __main__
    Attribute: b
    Value: [1, 2, 3]
    Attribute: __doc__
    Value:
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-30
      • 2012-01-08
      • 2016-05-12
      • 2021-08-28
      • 1970-01-01
      相关资源
      最近更新 更多