2012-04-18 32 views
7

Phương thức __contains__ của một lớp danh sách có kiểm tra xem một đối tượng có phải là một phần tử của danh sách hay không hoặc kiểm tra xem danh sách có chứa phần tử tương đương với tham số đã cho không?Danh sách Python Lớp __contains__ Phương thức Chức năng

Bạn có thể cho tôi ví dụ minh họa không?

Trả lời

9
>>> a = [[]] 
>>> b = [] 
>>> b in a 
True 
>>> b is a[0] 
False 

Điều này chứng tỏ rằng đây là kiểm tra giá trị (theo mặc định ít nhất), không phải kiểm tra danh tính. Hãy nhớ rằng một lớp học có thể nếu bạn muốn ghi đè lên __contains__() để làm cho nó trở thành kiểm tra nhận dạng. Nhưng một lần nữa, theo mặc định, không.

+0

Điều đó hoàn hảo cảm ơn bạn! –

1

Nó phụ thuộc vào lớp như thế nào nó kiểm tra. Đối với nội trang dựng sẵn list, nó sử dụng toán tử ==; bằng không bạn không thể sử dụng an toàn 'something' in somelist.

Để cụ thể hơn, nó kiểm tra xem mục có bằng một mục trong danh sách hay không - vì vậy nội bộ có nhiều khả năng là so sánh hash(a) == hash(b); nếu băm là bằng các đối tượng chính nó có thể được so sánh, quá.

+1

Nó sẽ không chỉ là một kiểm tra của băm - băm có thể được bình đẳng mà không có các giá trị bằng nhau. –

+0

Cảm ơn các bạn rằng đó là thông tin rất hữu ích! –

+0

Điều này là sai. Tôi chỉ định nghĩa một phương thức '__eq__' đã được (không bắt buộc) được chọn bởi' __contains__' hoặc 'in'. Do đó, rất có thể 'list' thực hiện một so sánh' a .__ eq __ (b) '. – Atcold

Các vấn đề liên quan