2011-11-15 7 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 

Au-dessus est un extrait de code de feedparser, pourquoi il y a un "soi" dans la méthode de définition de la fonction (auto, evalString, feedparser.parse (xmlfile))?"auto" en python expression lambda

Merci.

Répondre

7

self se réfère simplement au premier argument du lambda nommé self. Le nom self n'est pas un mot-clé réservé, c'est simplement une convention au-dessus de pythonistas pour nommer l'instance de l'objet sur lequel la fonction s'applique. ici, l'auteur utilise le nom self comme premier argument le lambda, parce que cet argument recevra une instance d'un objet sur lequel le lambda appliquera la méthode indiquée dans l'argument nommé method.

3

méthodes peuvent être appelées par leur classe en passant une instance de la classe comme premier argument. Puisque le premier argument d'une méthode normale est appelé self par convention, il est conservé ici.

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

Merci Ignacio, mais je ne veux pas dire la fonction de membre de classe. –

+0

Alors quoi. C'est comme ça que ça s'appelle. –

2

Ce lambda est destiné à être utilisé de manière similaire à une méthode de classe. Le self est l'instance de la classe, à peu près le même que le self dans toute autre méthode.