2011-11-15 12 views
5
def buildTestCase(xmlfile, description, method, evalString): 
    func = lambda self, xmlfile=xmlfile, method=method, evalString=evalString: \ 
     method(self, evalString, feedparser.parse(xmlfile)) 
    func.__doc__ = description 
    return func 

Por encima es un fragmento de código de feedparser, ¿por qué hay un "yo" en el método de definición de función (auto, evalString, feedparser.parse (xmlfile))?"auto" en la expresión lambda pitón

Gracias.

Respuesta

7

self simplemente se refiere al primer argumento de la lambda llamado self.

El nombre self no es una palabra reservada, es simplemente una convención sobre pythonistas para nombrar la instancia del objeto en el que se aplica la función. aquí, el autor usa el nombre self como el primer argumento de la lambda, porque este argumento recibirá una instancia de un objeto en el que la lambda aplicará el método especificado en el argumento llamado method.

3

Los métodos pueden invocarse a través de su clase pasando una instancia de la clase como primer argumento. Como el primer argumento de un método normal se llama self por convención, se retiene aquí.

>>> class C(object): 
... def foo(self): 
...  print 42 
... 
>>> c = C() 
>>> C.foo(c) 
42 
+0

Gracias Ignacio, pero no me refiero a la función de miembro de la clase. –

+0

¿Y qué? Así es como se llama. –

2

Ese lambda está destinado a ser utilizado de forma similar a un método de clase. El self es la instancia de la clase, más o menos lo mismo que el self en cualquier otro método.