Cải thiện bài viết
Lưu bài viết
Các hàm tạo trong Pythondestructors được gọi khi một vật thể bị phá hủy. Trong Python, các chất phá hủy không cần thiết nhiều như trong C ++ vì Python có bộ thu gom rác tự động xử lý bộ nhớ. Nó được gọi là khi tất cả các tham chiếu đến đối tượng đã bị xóa, tức là khi một đối tượng được thu thập rác.
Destructors are called when an object gets destroyed. In Python, destructors are not needed as much as in C++ because Python has a garbage collector that handles memory management automatically.
The
__del__[] method is a known as a destructor method in Python. It is called when all references to the object have been deleted i.e when an object is garbage collected.
Syntax of destructor declaration :
def __del__[self]: # body of destructor
Lưu ý: Một tham chiếu đến các đối tượng cũng bị xóa khi đối tượng đi ra khỏi tham chiếu hoặc khi chương trình kết thúc. & NBSP; Ví dụ 1: Đây là ví dụ đơn giản về phá hủy. Bằng cách sử dụng từ khóa DEL, chúng tôi đã xóa tất cả các tài liệu tham khảo của đối tượng ‘obj, do đó, bộ hủy đã tự động gọi. & Nbsp; A reference to objects is also deleted when the object goes out of reference or when
the program ends.
Example 1 : Here is the simple example of destructor. By using del keyword we deleted the all references of object ‘obj’, therefore destructor invoked automatically.
Python3
class
Employee:
def
__init__[
self
Employee created. Destructor called, Employee deleted.0
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
Employee created. Destructor called, Employee deleted.3
Employee created. Destructor called, Employee deleted.4
def
Employee created. Destructor called, Employee deleted.7
self
Employee created. Destructor called, Employee deleted.0
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called3
Employee created. Destructor called, Employee deleted.4
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called5
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called6
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called7
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called8
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called9
Output:
Employee created. Destructor called, Employee deleted.
Lưu ý: Chất phá hủy được gọi sau khi chương trình kết thúc hoặc khi tất cả các tham chiếu đến đối tượng bị xóa tức là khi số lượng tham chiếu trở thành 0, không phải khi đối tượng đi ra khỏi phạm vi. Ví dụ 2: Ví dụ này đưa ra lời giải thích về ghi chú đã đề cập ở trên. Ở đây, lưu ý rằng bộ hủy diệt được gọi sau khi ‘chương trình kết thúc được in. & Nbsp; The destructor was called after the program ended or when all the references to object are deleted i.e when the reference count becomes zero, not when object went out of scope.
Example 2 :This example gives the explanation of above mentioned note. Here, notice that the destructor is called after the ‘Program End…’ printed.
Python3
class
Employee:
def
__init__[
self
Employee created. Destructor called, Employee deleted.0
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
Employee:
0Employee created. Destructor called, Employee deleted.4
def
Employee created. Destructor called, Employee deleted.7
self
Employee created. Destructor called, Employee deleted.0
Employee created. Destructor called, Employee deleted.1
Employee:
9Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called5
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called6
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called7
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
5Employee created. Destructor called, Employee deleted.4
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called8
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called9
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
def
4Employee created. Destructor called, Employee deleted.4
Lưu ý: Chất phá hủy được gọi sau khi chương trình kết thúc hoặc khi tất cả các tham chiếu đến đối tượng bị xóa tức là khi số lượng tham chiếu trở thành 0, không phải khi đối tượng đi ra khỏi phạm vi. Ví dụ 2: Ví dụ này đưa ra lời giải thích về ghi chú đã đề cập ở trên. Ở đây, lưu ý rằng bộ hủy diệt được gọi sau khi ‘chương trình kết thúc được in. & Nbsp;
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
__init__[
1Employee created. Destructor called, Employee deleted.4
def
1
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.2
__init__[
8Employee created. Destructor called, Employee deleted.4
Output:
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called
Calling Create_obj[] function...
Making Object...
Employee created
function end...
Program End...
Destructor called
5Calling Create_obj[] function...
Making Object...
Employee created
function end...
Program End...
Destructor called
6 Calling Create_obj[] function...
Making Object...
Employee created
function end...
Program End...
Destructor called
7 Now, consider the following example :
Python3
def
7
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called9
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called5
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called6
__init__[
5Ví dụ 3: Bây giờ, hãy xem xét ví dụ sau: & nbsp; & nbsp;
class
self
1
def
__init__[
self
def
Employee created. Destructor called, Employee deleted.7
self
def
Employee created. Destructor called, Employee deleted.7
self
Employee created. Destructor called, Employee deleted.0
Employee created. Destructor called, Employee deleted.1
Employee created. Destructor called, Employee deleted.13
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called5
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called6
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called7
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called8
Calling Create_obj[] function... Making Object... Employee created function end... Program End... Destructor called9
Employee created. Destructor called, Employee deleted.20
Lưu ý: Chất phá hủy được gọi sau khi chương trình kết thúc hoặc khi tất cả các tham chiếu đến đối tượng bị xóa tức là khi số lượng tham chiếu trở thành 0, không phải khi đối tượng đi ra khỏi phạm vi. Ví dụ 2: Ví dụ này đưa ra lời giải thích về ghi chú đã đề cập ở trên. Ở đây, lưu ý rằng bộ hủy diệt được gọi sau khi ‘chương trình kết thúc được in. & Nbsp;circular reference.
Generally, Python’s garbage collector which is used to detect these types of
cyclic references would remove it but in this example the use of custom destructor marks this item as “uncollectable”.
Simply, it doesn’t know the order in which to destroy the objects, so it leaves them. Therefore, if your instances are involved in circular references they will live in memory for as long as the application run.