Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.
Phương thức del trong Python
Trong bài viết này, bạn sẽ tìm hiểu cách thức hoạt động của phương thức đặc biệt __del__ trong Python, cũng như vai trò của nó trong quá trình thu gom rác và quản lý bộ nhớ tự động. Phương thức này đóng vai trò quan trọng trong việc dọn dẹp các đối tượng không còn được sử dụng, giúp quản lý tài nguyên một cách hiệu quả hơn trong các ứng dụng Python.

Giới thiệu về phương thức del trong Python
Trong Python, trình thu gom rác (garbage collector) quản lý bộ nhớ tự động. Trình thu gom rác sẽ tiêu hủy các đối tượng không còn được tham chiếu.
Nếu một đối tượng triển khai phương thức __del__, Python sẽ gọi phương thức này ngay trước khi trình thu gom rác tiêu hủy đối tượng.
Tuy nhiên, trình thu gom rác quyết định thời điểm tiêu hủy đối tượng, vì vậy, nó cũng quyết định khi nào phương thức __del__ sẽ được gọi.
Bài viết này được đăng tại [free tuts .net]
Phương thức __del__ đôi khi được gọi là phương thức "hoàn tất lớp" (class finalizer). Tuy nhiên, cần lưu ý rằng __del__ không phải là "hàm hủy" (destructor), vì chính trình thu gom rác mới là thứ tiêu hủy đối tượng, không phải __del__.
Những hạn chế của phương thức del trong Python
Python sẽ gọi phương thức __del__ khi tất cả các tham chiếu đến đối tượng đã biến mất. Và trong hầu hết các trường hợp, bạn không thể kiểm soát được quá trình này.
Do đó, không nên sử dụng phương thức __del__ để giải phóng tài nguyên. Thay vào đó, nên sử dụng "quản lý ngữ cảnh" (context manager) để đảm bảo rằng các tài nguyên được dọn dẹp đúng cách.
Nếu phương thức __del__ có chứa tham chiếu đến các đối tượng khác, trình thu gom rác cũng sẽ tiêu hủy các đối tượng đó khi __del__ được gọi.
Nếu __del__ tham chiếu đến các đối tượng toàn cục (global objects), điều này có thể gây ra các hành vi không mong đợi.
Ngoài ra, nếu xảy ra ngoại lệ trong phương thức __del__, Python sẽ không ném ra ngoại lệ đó mà chỉ im lặng. Tuy nhiên, Python sẽ gửi thông báo ngoại lệ đến stderr, nên chương trình chính có thể nhận biết được các lỗi trong quá trình hoàn tất đối tượng.
Trên thực tế, bạn sẽ hiếm khi sử dụng phương thức __del__.
Ví dụ về phương thức del trong Python
Ví dụ dưới đây định nghĩa một lớp Person với phương thức đặc biệt __del__, tạo một đối tượng mới và sau đó đặt nó về giá trị None:
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
def __del__(self):
print('__del__ was called')
if __name__ == '__main__':
person = Person('John Doe', 23)
person = None
Kết quả:
__del__ was called
Khi chúng ta đặt đối tượng person về None, trình thu gom rác sẽ tiêu hủy đối tượng này vì không còn tham chiếu nào đến nó. Do đó, phương thức __del__ đã được gọi.
Nếu bạn sử dụng từ khóa del để xóa đối tượng person, phương thức __del__ cũng sẽ được gọi:
person = Person('John Doe', 23)
del person
Kết quả:
__del__ was called
Tuy nhiên, lệnh del không gây ra việc gọi phương thức __del__ nếu đối tượng vẫn còn tham chiếu nào đó.

Các kiểu dữ liệu trong C ( int - float - double - char ...)
Thuật toán tìm ước chung lớn nhất trong C/C++
Cấu trúc lệnh switch case trong C++ (có bài tập thực hành)
ComboBox - ListBox trong lập trình C# winforms
Random trong Python: Tạo số random ngẫu nhiên
Lệnh cin và cout trong C++
Cách khai báo biến trong PHP, các loại biến thường gặp
Download và cài đặt Vertrigo Server
Thẻ li trong HTML
Thẻ article trong HTML5
Cấu trúc HTML5: Cách tạo template HTML5 đầu tiên
Cách dùng thẻ img trong HTML và các thuộc tính của img
Thẻ a trong HTML và các thuộc tính của thẻ a thường dùng