Python Context Managers: Ba trường hợp bạn thực sự cần
Hầu hết các hướng dẫn đều hiển thị ví dụ tầm thường with open(...) và dừng lại. Đây là ba mẫu mà tôi thực sự sử dụng trong mã thực tế, và chế độ lỗi mà mỗi mẫu ngăn chặn. Trường hợp 1: Dọn dẹp tài nguyên và xử lý lỗi Khi bạn có tài nguyên phải dọn dẹp, bất kể điều gì xảy ra: class DatabaseConnection: def __init__(self, config): self.config = config self.connection = None def __enter__(self): self.connection = create_connection(self.config) return self.connection def __exit__(self, exc_type, exc_val, exc_tb): if self.connection: self.connection.close() Tại sao điều này quan trọng Dọn dẹp tài nguyên ngay cả trong trường hợp ngoại lệ Ngăn chặn rò rỉ tài nguyên Làm cho mã đáng tin cậy hơn Trường hợp 2: Quản lý trạng thái tạm thời Khi bạn cần thay đổi tạm thời một số trạng thái, sau đó khôi phục nó: ...