2011-06-30 16 views
7

私は以下のようなPythonのクラスを設定すると、作成されたラムダ式がクラスAにバインドされるはずです。なぜなら、ラムダをリストの中に入れたときに、なぜそれがバインドされていないのか分かりません。 。ラムダ式はどのようにクラスにバインドされていますか?

class A(object): 
    f = lambda x,y: (x + y) 
    g = [lambda x,y: (x + y)] 


a = A() 

#a.f bound 
print a.f 
<bound method A.<lambda> of <__main__.A object at 0xb743350c>> 

#a.g[0] not bound 
print a.g[0] 
<function <lambda> at 0xb742d294> 

なぜ1結合および他のではないでしょうか?

+0

を、あなたは代わりに '' a.l'のa.f'を意味していますか? –

+0

はい。固定、ごめん​​なさい – Mike

答えて

15

fは、定義に従ってクラスの一部であるため、バインドされています。 gは方法ではありません。 gはリストです。このリストの最初の要素は偶然ラムダ式です。これは、gがクラス定義内に定義されているかどうかとは関係ありません。

+2

http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy「ユーザー定義メソッド」 –

0

あなたはg[0]があまりにもバインドされた方法になりたい場合は、操作を行います。

class A(object): 
    f = lambda x,y: (x + y) 
    _ = lambda x,y: (x + y) 
    g = [_] 
関連する問題