jef*_*ind 4 python introspection object tweepy
我在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
Run Code Online (Sandbox Code Playgroud)
我所指的对象是从on_status函数返回的对象,称为status.当print status行执行时,我将其打印在屏幕上;
tweepy.models.Status对象位于0x85d32ec>
我的问题实际上非常通用.我想知道如何在视觉上打印出这个status对象的内容?我想知道这个对象里面有哪些信息.
我尝试了这种for i, v in status :方法,但它说这些对象不可迭代.并非所有对象属性都在函数定义中描述.
非常感谢!
mgi*_*son 10
你可以迭代status.__dict__.items():
for k,v in status.__dict__.items(): #same thing as `vars(status)`
print k,v
Run Code Online (Sandbox Code Playgroud)
如果类使用__slots__并且没有插槽,则上述方法将不起作用__dict__.__slots__虽然课程很少见,但不太可能成为问题.
另外,您也可以使用dir内置有getattr:
for attr in dir(status):
print attr, getattr(status,attr)
Run Code Online (Sandbox Code Playgroud)
这适用于具有的类__slots__,但是如果定义了自定义__getattr__则有一些限制(请参阅链接,并且__dict__会以相同的方式受到影响).
最后,如果你想要对所看到的内容进行非常精细的控制(例如,如果你只想要方法),你可以查看inspect模块中的一些好东西.
我一直是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']
Run Code Online (Sandbox Code Playgroud)
我相信它等同于sorted(对象.__dict__.keys()).