2009-03-26 4 views
25

特定のオブジェクトの属性とメソッドをリストする関数がPythonにはありますか?特定のオブジェクトの属性とメソッドをリストする関数がPythonにはありますか?

のようなもの:

ShowAttributes (myObject) 

    -> .count 
    -> .size 

ShowMethods (myObject) 

    -> len 
    -> parse 
+0

重複します。http:/ /stackoverflow.com/questions/546337/how-do-i-perform-introspection-on-an-object-in-python-2-x –

+0

またこれも:http://stackoverflow.com/questions/192109/現在のプロパティと値の –

+0

['property'](https://docs.python.org/)の、PythonからPythonへのすべての現在のプロパティの機能があります。 2/library/functions.html?highlight = property#property)は、Pythonの別の概念に与えられた名前です。 「アトリビュート」という言葉があなたの方に適しています。私が好きな深読みは、どちらもhttp://www.cafepy.com/article/python_attributes_and_methods/python_attributes_and_methods.html – n611x007

答えて

42

あなたはdir()機能を見てみたい:

>>> li = [] 
>>> dir(li)  
['append', 'count', 'extend', 'index', 'insert', 
'pop', 'remove', 'reverse', 'sort'] 

liがリストされ、そのリストのすべてのメソッドのリストを返しますdir(li)。返されるリストにはメソッドの名前が文字列として含まれ、メソッド自体は含まれないことに注意してください。

をなし、これは同様に、すべての継承されたメソッドが表示されます。コメントに応答して


編集。この例を考えてみましょう:

test.py:

class Foo: 
    def foo(): pass 

class Bar(Foo): 
    def bar(): pass 

Pythonインタプリタ:

01:

>>> from test import Foo, Bar 
>>> dir(Foo) 
['__doc__', '__module__', 'foo'] 
>>> dir(Bar) 
['__doc__', '__module__', 'bar', 'foo'] 

あなたはそのPython's documentation状態を注意してください

注:dir()は主 で使用するための便宜として 対話プロンプト供給されるので、 しようとし、それは厳密に又は一貫して定義された を供給しようとするよりも、 複数名の興味深いセットを供給名前の をに設定し、その詳細な動作 は、リリース間で変更される場合があります。 の場合、引数 がクラスである場合、メタクラス属性は結果リストの ではありません。

したがって、コードで使用することは安全ではありません。代わりにvars()を使用してください。 Vars()にスーパークラスに関する情報が含まれていない場合は、スーパークラスを自分で収集する必要があります。


あなたが対話インタプリタで情報を見つけるためにdir()を使用している場合は、help()の使用を検討してください。

+0

これは、親クラスまたは親の親クラスではなく、このオブジェクトタイプに直接適用できるメソッドをリストしたものです。 –

+0

いいえ、継承されたメソッドも - 私の編集を参照してください。 –

+0

ありがとう、私はこれからも学んだ。 –

10

は(DIRません)とVARS()スーツあなたは?

+0

です。恐ろしい、私はこれらを知らなかった。 –

+1

Pythonチュートリアルを読んだ直後に、誰もがこのhttp://docs.python.org/library/functions.htmlを読んでください。 – Anonymous

1

これを行う別の方法は、気の利いたIPython環境です。これを使用すると、オブジェクトのすべてのメソッドとフィールドを見つけることができます。

8

、より人間が読める方法を、あなたはseeを使用することができます。

In [1]: from see import see 
In [2]: x = "hello world!" 
In [3]: see(x) 
Out[3]: 
    [] in + * % < <= == != > >= hash() help() len() 
    repr() str() .capitalize() .center() .count() .decode() 
    .encode() .endswith() .expandtabs() .find() .format() .index() 
    .isalnum() .isalpha() .isdigit() .islower() .isspace() .istitle() 
    .isupper() .join() .ljust() .lower() .lstrip() .partition() 
    .replace() .rfind() .rindex() .rjust() .rpartition() .rsplit() 
    .rstrip() .split() .splitlines() .startswith() .strip() 
    .swapcase() .title() .translate() .upper() .zfill() 
+0

が絶品!私が見逃していることは、 '<='のようなものについては 'help()'や '__doc__'を得ることができないということです。あなたが頭から彼らの魔法を知りません。 :)全体的に小さな問題と素晴らしいパッケージ! – n611x007

1

誰もがPythonオブジェクトの機能を言及しないように私には驚くべきことである:
keys()

+1

ええ、それは驚くべきことです:p –