2011-06-30 12 views
7

Jeśli ustawię klasę podobną do poniższej w Pythonie, ponieważ oczekuję, że wyrażenia lambda utworzone powinny być powiązane z klasą A. Nie rozumiem dlaczego kiedy umieściłem lambdę wewnątrz listy, tak jak w g, to nie jest ono związane .W jaki sposób wyrażenia lambda są powiązane z klasą?

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> 

Dlaczego jeden jest związany, a drugi nie?

+0

Czy to znaczy 'a.f' zamiast' a.l'? –

+0

tak. naprawiono, przepraszam – Mike

Odpowiedz

15

f jest związany, ponieważ jest częścią klasy zgodnie z definicją. g nie jest metodą. g to lista. Pierwszym elementem tej listy jest przypadkowo wyrażenie lambda. To nie ma nic wspólnego z tym, czy g jest zdefiniowany w definicji klasy, czy też nie.

+2

http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy "Metody zdefiniowane przez użytkownika" –

0

Jeśli chcesz g[0] się metodę związaną też zrobić:

class A(object): 
    f = lambda x,y: (x + y) 
    _ = lambda x,y: (x + y) 
    g = [_] 
Powiązane problemy