2016-04-25 7 views
1

新しいインスタンスを作成せずに__init__から引数を抽出する方法とは何ですか? コード例は:Pythonのコンストラクタ関数__init__からの引数のイントロスペクション

class Super: 
    def __init__(self, name): 
     self.name = name 

私はSuper.__dict__.keys()型ソリューションのようなものを探しています。値を追加せずに名前の引数情報を取得するだけです。そのような選択肢はありますか?

### Run test.a ### 
ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None) 
>>> 

注:inspect.getargspecが実際に以下を参照してください、Superのインスタンスを作成しません:

import inspect 

class Super: 
    def __init__(self, name): 
     print 'instantiated' 
     self.name = name 

print inspect.getargspec(Super.__init__) 

この出力

+0

質問は不明です。名前の価値をチェックし、新しいインスタンスを作成するかどうかを決定したいのですか? – ronakg

+0

私はインスタンスを全く作成したくありません。オブジェクトの引数をイントロスペクトしたいこれは、「このオブジェクトがどのような引数を持っているか」という質問と同じです。それは値に関するものではなく、一般的なイントロスペクションです。私はもう少し理解できるように質問を変えました。 –

+1

インスタンスは '__init__'が呼び出されるまでに既に作成されています。この回答を見るhttp://stackoverflow.com/questions/674304/pythons-use-of-new-and-init – ronakg

答えて

3

あなたはinspect

>>> import inspect 
>>> inspect.getargspec(Super.__init__) 
ArgSpec(args=['self', 'name'], varargs=None, keywords=None, defaults=None) 
>>> 

編集を使用することができますinstantiatedは決して印刷されませんでした。

+0

それは私が探していたようだ。もう1つ質問:「検査」モジュールなしでその結果を得るオプションがあるかどうか。 Super .__ dict __。keysのようなものがなければ、inspect.getargspec()は引数を取り出すのに役立つインスタンスシミュレーションのようなものですか? –

+1

関数から引数名を取り出すための答えがたくさんあります - http://stackoverflow.com/questions/582056/getting-list-of-parameter-names-inside-python-functionそれはinspectのようです唯一の方法。 'globals'を使うことさえ、あなたが望むものではない関数呼び出しで返します。ちなみに、 'inspect'を使用しても関数呼び出しは起こらず、私の答えを編集しています。 – Bahrom

+0

@ Vy.Ivは更新された答えを見ています。とにかくこれを継承するクラスの階層のために行うには、 – Bahrom

関連する問題