Python迭代对象属性

Python iterating through object attributes

本问题已经有最佳答案,请猛点这里访问。

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

我有一门课:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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"])

现在我可以通过这样做获得我的信息:

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

我想能够做的是迭代for循环中的属性,比如:

1
2
for item in k:
   print item.names


更新

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

Python2

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

Python3

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

这将打印

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


您可以使用标准的python习惯用法,vars()

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


在python中迭代对象属性:

1
2
3
4
5
6
7
8
9
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"")

印刷品:

1
2
3
4
5
6
7
8
9
10
11
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: