【问题标题】:How to "see" the structure of an object in python如何在python中“查看”对象的结构
【发布时间】:2012-08-24 12:04:32
【问题描述】:

我在 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 : 方法,但它说这个对象是不可迭代的。此外,并非所有对象属性都在函数定义中进行了描述。

非常感谢!

【问题讨论】:

  • +1 并已收藏。我通常只使用dir,但现在 mgilson 的回答给了我一些更具体的重复使用的东西。想要补充: Dive Into Python (for v2, first one) 有一章关于introspection with an apihelper->info function。还提供了有关成员等的一些有用信息,以及文档字符串中的文档。

标签: python object introspection tweepy


【解决方案1】:

你可以遍历status.__dict__.items():

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

如果类使用__slots__ 并且没有__dict__ 的插槽,则上述方法将不起作用。带有__slots__ 的类非常少见,因此不太可能成为问题。

或者,您可以将dir builtingetattr 一起使用:

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

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

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

【讨论】:

  • 所以我尝试了你的第一个建议并得到了这个错误:Encountered Exception: too many values to unpack ... 似乎是一些巨大的数据。
  • 第二个建议效果很好! for attr in dir(status)。谢谢!
  • @jeffery_the_wind -- 对不起第一个。 (我的程序员错误)。 status.__dict__ 是字典。要遍历字典中的键/值对,您需要使用 items 方法。已更新。
  • @deadly -- 什么错误? *天真地吹口哨*
【解决方案2】:

我一直是 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())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-03
    • 1970-01-01
    • 2019-07-11
    • 2021-12-27
    • 2011-08-22
    • 2011-10-27
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多