2011-06-30 17 views
7

Si configuro una clase como la siguiente en Python, como espero que las expresiones lambda creadas se vinculen a la clase A. No entiendo por qué cuando pongo una lambda dentro de una lista como en g no está enlazado .¿Cómo se vinculan las expresiones lambda a una clase?

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> 

¿Por qué está uno atado y no el otro?

+0

¿Quieres decir 'a.f' en lugar de' a.l'? –

+0

sí. arreglado, lo siento – Mike

Respuesta

15

f está vinculado porque es una parte de la clase según la definición. g no es un método. g es una lista. El primer elemento de esta lista pasa a ser una expresión lambda. Eso no tiene nada que ver con si g se define dentro de una definición de clase o no.

+2

http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy "Métodos definidos por el usuario" –

0

Si desea g[0] para ser un método vinculado también, hacer:

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