5

私はPython2.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行が実行されると、これが画面に印刷されます。

0x85d32ecのtweepy.models.Statusオブジェクト>

私の質問は実際にはかなり一般的です。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(オブジェクトと同等だと思います.__dict__.keys())

于 2012-08-24T12:10:33.800 に答える