2011-06-30 21 views
7

Nếu tôi thiết lập một lớp như dưới đây trong Python, như tôi mong đợi các biểu thức lambda tạo nên được ràng buộc với lớp A. Tôi không hiểu tại sao khi tôi đặt một lambda bên trong một danh sách như trong g nó không bị ràng buộc .Biểu thức lambda liên kết với một lớp học như thế nào?

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> 

Tại sao thẻ này bị ràng buộc và không phải loại kia?

+0

Bạn có nghĩa là 'a.f' thay vì 'a.l'? –

+0

có. cố định, xin lỗi – Mike

Trả lời

15

f bị ràng buộc vì đó là một phần của lớp theo định nghĩa. g không phải là một phương pháp. g là một danh sách. Yếu tố đầu tiên của danh sách này tình cờ xảy ra là một biểu thức lambda. Đó là không có gì để làm với liệu g được định nghĩa bên trong một định nghĩa lớp hay không.

+2

http://docs.python.org/reference/datamodel.html#the-standard-type-hierarchy "Phương pháp do người dùng xác định" –

0

Nếu bạn muốn g[0] trở thành một phương pháp ràng buộc quá, làm:

class A(object): 
    f = lambda x,y: (x + y) 
    _ = lambda x,y: (x + y) 
    g = [_] 
Các vấn đề liên quan