2012-03-11 13 views
-1

免責事項:私はPythonで私の最初のステップをやっているので、質問が少し馬鹿に聞こえるかもしれません。オブジェクトのすべてのフィールドを取得するには?

selfに格納されているすべての変数をリストする方法はありますか?

+0

可能な重複http://stackoverflow.com/q/191010/776084:あなたはそれらについての詳細を取得するには、クラスの内容にdirtypehelpを使用することができます。 – RanRag

答えて

1

すべてのpythonオブジェクトには、__dict__という特別なメンバーがあります。これは、すべてのインスタンスのメンバーを含む辞書です。

self.__dict__.keys()

self.__dict__['foo']はあなたがself.foo = 1ようなものを書いて、基本的には、BTWメンバーfoo

の値にアクセスすることができます彼らの名前をリスト作品self.__dict__['foo'] = 1を書くことに(物事の基本的なレベルで)等価です同じように。

+1

これは単純すぎることに注意してください。オブジェクトは属性アクセスをオーバーロードすることができます(それはいくつかの理由があります)。これは '__dict__'を不完全にするか全く役に立たなくします。より一般的には、 'property'は' __dict__'にはない属性を作成するために使われ、静かに関数を呼び出します。 '__dict__'を完全に削除する' __slots__'もあります。そして、もっと例外があると確信しています。 – delnan

+0

@delnan本当ですが、彼は非常に基本的なユースケースについて尋ねていたので、これは良い近似です。 –

3

__dict__が存在しないオブジェクトとして定義されているオブジェクトが__slots__であっても、オブジェクトのメンバーを一覧表示するので、inspect.getmembersが望ましい場合があります。

>>> import inspect 
>>> class F: 
...  def __init__(self): 
...    self.x = 2 
... 
>>> inspect.getmembers(F()) 
[('__doc__', None), ('__init__', <bound method F.__init__ of <__main__.F instance at 0xb7527fec>>), ('__module__', '__main__'), ('x', 2)] 
>>> class F: 
...  __slots__ = ('x') 
...  def __init__(self): 
...    self.x = 2 
... 
>>> inspect.getmembers(F()) 
[('__doc__', None), ('__init__', <bound method F.__init__ of <__main__.F instance at 0xb72d3b0c>>), ('__module__', '__main__'), ('__slots__', 'x'), ('x', 2)] 
1

あなたが初心者なら、あなたはので、ここで簡単な質問をしていることは単純な答えです:あなたはすべてクラスやオブジェクトの内容だけではなく、変数だけでなく、メソッドや他のを見ることができますコンテンツは、dirというコマンドで表示されます。あなたがpythonプロンプトを覗いているときには素晴らしいことです。

dir("hello") # examine string object 
dir(str)  # examine string class 
import os  
dir(os)  # Examine module 

を試して、はい、クラスの中から、あなたはselfだけのクラスオブジェクトであることから、selfを調べるためにそれを使用することができます。 DIR(os.stdout)

関連する問題