Python遍历对象属性

102

如何在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

1
什么属性?你是指超过'k'个属性吗? - levi
我可能没有使用正确的术语,但是我想要能够将我的用户名、推文等返回到某种对象中,以便我可以逐个迭代它们。就像这样:对于Twitter中的项目,打印item.usernames。大致如此。 - Zach Johnson
尝试我的答案,看看是否适用于你。 - levi
3个回答

155

更新:

对于 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]

7
在Python3中,k.iteritems()已经被移除了,请使用k.items()代替。 - trdavidson
1
@trdavidson,我已经添加了注释。 - levi
3
Python3 中的新特性是在 print 操作时需要使用括号。 - Free Url
隐藏的 __dict__ 方法非常有用!此外,要返回一个字典,请使用字典推导式 print({attr:value for attr, value in k.__dict__.iteritems()}) - Davos
1
我尝试在一个继承自另一个对象的对象上执行此操作,但它只返回了属于基类的属性。 - alex
1
只有当对象具有__dict__属性时,此方法才有效。这种情况并非总是成立(参见https://docs.python.org/3/reference/datamodel.html#slots),如果没有该属性,则应通过`__slots__`进行迭代。 - Konstantin Sekeresh

45

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

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

9

Iterate over an objects attributes in 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:

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接