2011-01-29 24 views
13

có vẻ như tôi không hiểu điều gì đó với --- câu lệnh python with.Mục tiêu tuyên bố `with` của python là bất ngờ Không có

xem xét lớp này:

class test(object): 
    def __enter__(self): pass 
    def __exit__(self, *ignored): pass 

bây giờ, khi sử dụng nó với with, giống như trong

with test() as michael: 
    print repr(michael) 

Tôi mong chờ một số đầu ra như dụ < thử nghiệm tại memore blah >. Nhưng tôi nhận được Không có.

Đã xảy ra lỗi ở đây? Mọi gợi ý sẽ giúp ích.

(Tôi đang sử dụng Python 2.6.6.)

EDIT:

Nhờ ephement chỉ cho tôi đến tài liệu. Phương pháp __enter__ nên đọc

def __enter__(self): return self 

Trả lời

18

Từ các tài liệu with:

Nếu một mục tiêu đã được đưa vào báo cáo kết quả with, giá trị trả về từ __enter__() được gán cho nó.

Nếu bạn def __enter__(self): return self thì sản lượng dự kiến ​​của bạn được tạo.

2

Từ the docs:

object.__enter__(self)

Nhập bối cảnh thời gian chạy liên quan đến đối tượng này. Tuyên bố with sẽ ràng buộc giá trị trả về của phương thức này với (các) mục tiêu được chỉ định trong mệnh đề as của tuyên bố, nếu có.

-1

tôi nhận được điều tương tự cho repr(michael)

Hãy thử điều này thay vì:

m.__repr__() 

Tôi không hoàn toàn chắc chắn, nhưng tôi nghĩ rằng nó có cái gì để làm với thực tế là bạn thiên đường chưa định nghĩa phương thức repr trong lớp test của bạn

+0

Không, 'đối tượng .__ repr__' được sử dụng: –

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