2017-03-08 10 views
0

メソッドに注入された依存関係のリストを取得する方法はありますか?依存関係のGETリストは、外部オブジェクトを印刷しますPythonでキャプチャされたオブジェクトのリストを印刷する

external_object = "abc" 
def func(data, params) 
    print(external_object) 
    ... 

def get_list_of_dependencies(func): 
    # TODO 

いくつかの読書に指し示すことも素晴らしい:)

例だろう。私はこれをやろうとしている理由は、関数funcをメモしようとしているからです。しかし、これらの外部依存関係が関数に注入されているため、作成したハッシュは完全には機能しません。

ありがとうございました!

+0

これはおそらく私自身の理解の欠如ですが、関数をメモするのはどういう意味ですか?そして、外部から注入された依存関係は何ですか?外の図書館はありますか? – mitoRibo

+0

また、*関数*はメソッドではありません。 –

+0

説明をありがとう。まだ私の頭の中でコンテキストの切り替えフェーズで:P – Akshay

答えて

2

functionオブジェクトに添付されている__code__オブジェクトを調べることで、あなたが望むものが達成できると信じています。例:ファイルで

funcs.pyと呼ばれる:

インタプリタセッションで今すぐ
external_object = "external object" 
def f(): 
    print(external_object) 
    nested = "nested" 
    def g(): 
     print(nested) 
    return g 

、:

タイプ "ヘルプ"、 "著作権"、 "クレジット" または "ライセンス" の詳細については、 。

>>> import funcs 
>>> funcs.f.__code__.co_names 
('print', 'external_object') 
>>> 

それとも、ローカル変数をしたい場合:あなたはまた、無料の変数のように、他のものにアクセスすることができます

>>> funcs.f.__code__.co_cellvars 
('nested',) 

。お知らせ、nestedgのため閉鎖中の自由変数である:

>>> g = funcs.f() 
external object 
>>> g.__code__.co_names 
('print',) 
>>> g.__code__.co_freevars 
('nested',) 
>>> 

は、利用可能な属性hereについては、こちらをご覧ください。私は

彼らの定義は通訳、 の将来のバージョンで変更される可能性があり、としてドキュメントに警告し以来、おそらく、これに依存しているために素晴らしいアイデアではありません、注意しますが、彼らは完全を期すためにここに記載されています。

+0

ああ、うわー!どうもありがとうございます!それが私が探していたものです。私が理解しているところから、__code__はあなたにコンパイルされたオブジェクトのコードを示します。メソッドでこれを実行する方法はありますか? – Akshay

+0

@Akshay「これをメソッドで実行する」とはどういう意味ですか? –

+0

例: デフmagic_function(FUNC):。 印刷FUNC .__コード__は をco_namesかであることが悪い練習 – Akshay

0

__code__属性にある)コードオブジェクトには、コードオブジェクト自体で使用される値と名前を与えるいくつかの属性が含まれています。 co_constsco_namesなど

関連する問題