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
上面是feedparser的代码片段,为什么函数定义方法中有“self”(self,evalString,feedparser.parse(xmlfile))?
感谢。
答案 0 :(得分:7)
self
只是引用名为self
的lambda的第一个参数。
名称self
不是保留关键字,它仅仅是pythonistas上面的约定,用于命名应用该函数的对象的实例。在这里,作者使用名称self
作为lambda的第一个参数,因为该参数将接收一个对象的实例,lambda将在该对象上应用名为method
的参数中指定的方法。 / p>
答案 1 :(得分:3)
可以通过将类的实例作为第一个参数传递来通过类调用方法。由于普通方法的第一个参数按惯例称为self
,因此它将保留在此处。
>>> class C(object):
... def foo(self):
... print 42
...
>>> c = C()
>>> C.foo(c)
42
答案 2 :(得分:2)
该lambda旨在与类方法类似地使用。 self
是类的实例,与任何其他方法中的self
几乎相同。