在您的情况下,您可能想要的是:
"flickr = flickrapi.FlickrAPI(api_key)
photos = flickr.photos_search(user_id='73509078@N00', per_page='10')
sets = flickr.photosets_getList(user_id='73509078@N00')"
-flickrapi docs
所以它的作用是获取返回的XML doc 并作为ElementTree 对象提供给您,这样更容易处理。 (这是sets 对象)。不幸的是,照片对象无法做到这一点。
ElementTree docs
所以要获得属性的一般列表,首先使用传递给您的树根节点的.tag 和.attrib 方法。
您可以在 ElementTree 文档的示例中使用集合作为 root :)
它给出的一个例子是:
sets = flickr.photosets_getList(user_id='73509078@N00')
sets.attrib['stat'] => 'ok'
sets.find('photosets').attrib['cancreate'] => '1'
set0 = sets.find('photosets').findall('photoset')[0]
+-------------------------------+-----------+
| variable | value |
+-------------------------------+-----------+
| set0.attrib['id'] | u'5' |
| set0.attrib['primary'] | u'2483' |
| set0.attrib['secret'] | u'abcdef' |
| set0.attrib['server'] | u'8' |
| set0.attrib['photos'] | u'4' |
| set0.title[0].text | u'Test' |
| set0.description[0].text | u'foo' |
| set0.find('title').text | 'Test' |
| set0.find('description').text | 'foo' |
+-------------------------------+-----------+
... and similar for set1 ...
-flickrapi docs
另一个你可能间接问过的问题:
一般给定一个 python class 你可以这样做:
cls.__dict__
获取一些对其可用的属性。
给定一个通用的 Python 对象,您可以使用 vars(obj) 或 dir(obj)
例如:
class meh():
def __init__(self):
self.cat = 'dinosaur'
self.number = 1
# some example methods - don't actually do this
# this is not a good use of a method
# or object-oriented programming in general
def add_number(self, i):
self.number+=i
j = meh()
print j.__dict__
{'number': 1, 'cat': 'dinosaur'}
这将返回用于对象的命名空间的字典:
“除了一件事。模块对象有一个秘密只读
名为 dict 的属性,它返回用于
实现模块的命名空间; dict 这个名字是一个属性
但不是全局名称。显然,使用 this 违反了抽象
命名空间实现,并且应该限制在诸如
事后调试器。” - Python Docs
dir 返回
"不带参数,返回当前本地的名字列表
范围。使用参数,尝试返回有效属性列表
为那个对象。”docs
和
vars 只返回 dict 属性:
"返回模块、类、实例或任何对象的 dict 属性
其他具有 dict 属性的对象。
模块和实例等对象具有可更新的dict
属性;但是,其他对象可能对其有写入限制
dict 属性(例如,新式类使用 dictproxy 来防止直接更新字典)。" docs
应该注意的是,nothing 可以为您提供在运行时对象可用的一切,因为您可以做一些巧妙的事情来修改对象。