2

純粋な好奇心から:関数の割り当てられた属性の辞書/リストに(その関数内から)アクセスする簡単な方法(2行以下のコード)はありますか?

例えば:

def func(*args):
    print("# of arguments = {0} ".format(len(args)))       # normal arguments
    print("# of attributes = {0}".format(len(func_attrs))) # function-attributes

func()

func.func_attr_1 = 'How do i get all attributes from within the associated function?'
func.func_attr_2 = 'How do i get all attributes from within the associated function?'

関数は呼び出し可能なオブジェクトであるため、関数に属性を提供することは可能ですが、これらの属性のリストに簡単にアクセスする方法はないようです。

locals()役に立たglobals()なかった。 dir()トリックを行うようですが、属性をフィルタリングする必要があります。事前に属性名がわからない場合、これはやや不便です。

属性を割り当てることができれば、内部からディレクトリにアクセスする方法が必要です。

更新

属性にアクセスする前に、関数を実際に呼び出す/呼び出す=インスタンス化するのを完全に忘れていました。... 悪い!- 答えてくれてありがとう ;-)

当然私は試しfunc.__dict__てみdir(func)ましたが、そうする前に関数オブジェクトをインスタンス化していませんでした...そして私の元のテストでは、最初に関数内から属性を定義し、次に関数を呼び出さなかったが、関数にアクセスしようとしました-outer-scope からの属性 -当然失敗しました!

4

3 に答える 3

5

を使用して、次のようなことを意味します__dict__

In [11]: def foo():
   ....:     foo=1

In [12]: foo.bar=3

In [13]: foo.__dict__
Out[13]: {'bar': 3}
于 2012-11-05T15:08:28.650 に答える
4

関数名が与えられた場合、関数funcfunc.__dict__直接割り当てられたすべての属性を含む関数のディクショナリです。その後、メンバーシップ テスト ( if foo in func.__dict__) を実行したり、 を使用してディクショナリのキーを反復処理したり、ディクショナリforの他の方法を使用したりできます。

于 2012-11-05T15:09:53.220 に答える