Hướng dẫn destructor in python example - hàm hủy trong ví dụ python

Xem thảo luận

Show

    Cải thiện bài viết

    Lưu bài viết

  • Đọc
  • Bàn luận
  • Xem thảo luận

    Cải thiện bài viết

    Lưu bài viết

    Đọ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

    Bàn luận 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

    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.

    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;

    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

    class Employee:

    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 called
    3
    Employee created.
    Destructor called, Employee deleted.
    4

        def __init__(self

        def

    Employee created.
    Destructor called, Employee deleted.
    7self

    Output:

    Employee created.
    Destructor called, Employee deleted.

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    5
    Calling 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
    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

    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.

    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;

    Employee created.
    Destructor called, Employee deleted.
    0
    Employee created.
    Destructor called, Employee deleted.
    1
    Employee created.
    Destructor called, Employee deleted.
    2Employee:0
    Employee created.
    Destructor called, Employee deleted.
    4

    class Employee:

    Employee created.
    Destructor called, Employee deleted.
    0
    Employee created.
    Destructor called, Employee deleted.
    1Employee:9

        def __init__(self

        def

    Employee created.
    Destructor called, Employee deleted.
    7self

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    5
    Calling 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

        

    Employee created.
    Destructor called, Employee deleted.
    1
    Employee created.
    Destructor called, Employee deleted.
    2def4
    Employee created.
    Destructor called, Employee deleted.
    4

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    8
    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    9

    Employee created.
    Destructor called, Employee deleted.
    1
    Employee created.
    Destructor called, Employee deleted.
    2__init__(1
    Employee 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__(8
    Employee created.
    Destructor called, Employee deleted.
    4

    Output:

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called

    def     1 Now, consider the following example : 
     

    Python3

    Các

        

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    5
    Calling 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

        def7

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    9

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    5
    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    6 __init__(5

    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;

    class Employee:

    class Employee:

    Employee created.
    Destructor called, Employee deleted.
    0
    Employee created.
    Destructor called, Employee deleted.
    1
    Employee created.
    Destructor called, Employee deleted.
    13

        def __init__(self

        def

    Employee created.
    Destructor called, Employee deleted.
    7self

    Employee created.
    Destructor called, Employee deleted.
    20

    Calling Create_obj() function...
    Making Object...
    Employee created
    function end...
    Program End...
    Destructor called
    5
    Calling 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
    7circular 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.