5

我在 python 2.7 中工作。我一直在尝试使用tweepy包。有一个对象叫做 tweepy.models.status 对象,它的功能在这里定义:https ://github.com/tweepy/tweepy/blob/master/tweepy/models.py 。

我有一个看起来像这样的函数:

    def on_status(self, status):
        try:
            print status
            return True
        except Exception, e:
            print >> sys.stderr, 'Encountered Exception:', e
            pass

我所指的对象是从on_status函数返回的对象,称为status. 当该print status行执行时,我将其打印在屏幕上;

tweepy.models.Status 对象位于 0x85d32ec>

我的问题实际上很笼统。我想知道如何直观地打印出这个status对象的内容?我想知道这个对象里面有什么信息。

我尝试了这种for i, v in status :方法,但它说这个对象是不可迭代的。此外,并非所有对象属性都在函数定义中进行了描述。

非常感谢!

4

2 回答 2

11

你可以迭代status.__dict__.items()

for k,v in status.__dict__.items():  #same thing as `vars(status)`
    print k,v

如果类使用__slots__并且没有用于__dict__. 但是,具有的类__slots__非常罕见,因此不太可能成为问题。

或者,您可以使用dir内置getattr

for attr in dir(status):
    print attr, getattr(status,attr)

这确实适用于具有 的类__slots__,但如果定义了自定义,则会有一些限制__getattr__(请参阅链接,并且__dict__会以同样的方式受到影响)。

最后,如果您想对所看到的内容进行非常好的控制(例如,如果您只需要方法),您可以查看inspect模块中的一些好东西。

于 2012-08-24T12:05:56.063 回答
6

我一直是dir用于手动内省的内置函数的粉丝。适用于模块、对象...

>>> import math
>>> dir(math)
['__doc__', '__name__', '__package__', 'acos', 'acosh', 'asin', 'asinh', 'atan',
 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf',
 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum',
 'gamma', 'hypot', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p',
 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'trunc']

我相信它相当于sorted(object.__dict__.keys())

于 2012-08-24T12:10:33.800 回答