如何在Python中列出对象的所有属性?

时间:2017-12-15 03:49:29

标签: python object attributes praw

我正在尝试使用Praw编写一个Reddit机器人,这是我的功能:

submission = reddit.submission(mention.submission.id)

(我之前已经定义了reddit = praw.Reddit()等等,所以提交应该给我一个submission object

首先,我想检查提交是自我发布还是链接。我可以通过查看submission.is_self来做到这一点。但是,出于好奇,我尝试打印dir(submission)submission.__dict__,并且都没有将is_self列为对象的属性。

为什么会这样?如何在不深入了解库本身的源代码的情况下,如何可靠地找到对象的所有属性? Praw的文档在这方面有点缺乏。

2 个答案:

答案 0 :(得分:1)

内置dir()方法用于列出所有属性:

>>> class MyClass():
...     def __init__(self):
...         self.foo = 1
... 
>>> c = MyClass()
>>> dir(c)
['__doc__', '__init__', '__module__', 'foo']
>>> 

答案 1 :(得分:0)

PRAW使用__getattr__ magic来动态获取和设置对象属性(请参阅praw/models/reddit/base.py中的RedditBase类)。这就是为什么dir()没有显示它的原因。

is_self在源代码中的任何位置都不存在,因为此字符串基于从reddit收到的数据。