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

Trên đây là đoạn mã từ feedparser, tại sao có một "tự" trong phương thức định nghĩa hàm (self, evalString, feedparser.parse (xmlfile))?"tự" trong biểu thức lambda python

Cảm ơn.

Trả lời

7

self chỉ đơn giản là tham chiếu đến đối số đầu tiên của lambda có tên là self.

tên self không phải là từ khóa dành riêng, nó chỉ là một quy ước trên pythonistas để đặt tên thể hiện của đối tượng mà hàm áp dụng. ở đây, tác giả sử dụng tên self làm đối số đầu tiên cho lambda, vì đối số này sẽ nhận một cá thể của đối tượng mà lambda sẽ áp dụng phương thức được chỉ định trong đối số có tên là method.

3

Phương thức có thể được gọi qua lớp của chúng bằng cách chuyển một thể hiện của lớp làm đối số đầu tiên. Vì đối số đầu tiên của một phương thức thông thường được gọi là self theo quy ước, nó được giữ lại ở đây.

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

Cảm ơn Ignacio, nhưng tôi không có nghĩa là chức năng của thành viên lớp học. –

+0

Vì vậy, những gì. Đó là cách nó được gọi. –

2

lambda đó được dự định sẽ được sử dụng tương tự như một phương pháp lớp học. Các self là trường hợp của lớp, khá nhiều giống như self trong bất kỳ phương pháp nào khác.