Деструктор в Python - Різні приклади з його перевагами

Зміст:

Anonim

Вступ до Destructor в Python

Конструктори та деструктори - це два важливі поняття в пітоні. Конструктори викликаються, коли створюється об’єкт класу. Однак Деструктори викликаються, коли об’єкт класу знищений. Отже, неправильно сказати, Конструктори - це протилежність Деструкторам. Python, будучи об'єктно-орієнтованою мовою програмування, Constructors та Destructors також є частиною цієї мови.

У python деструктори використовуються не стільки, скільки Java та C ++. Але знаючи, що це робить ще сильнішою базою в python.

Деструктори можуть бути дуже корисними, коли мова йде про розумну роботу програми. Наприклад: звільнення використаних ресурсів перед виходом з програми, як, наприклад, звільнення пам'яті, закриття файлів тощо.

Ключове слово, яке використовується для визначення Деструктора: ключове слово __del __ ():

Синтаксис:

def __del__(self):
#destructor body

Як видно, __del__ - це ключове слово, яке використовується для визначення деструктора. Коли він викликається, всі посилання на цей об'єкт видаляються, які також відомі як збирання сміття.

Приклади деструктора в Python

Подивимось різні приклади деструктора в python, щоб краще зрозуміти:

Приклад №1

class Grocery:
# Initializing
def __init__(self):
print('Grocery created.')
# Deleting (Calling destructor)
def __del__(self):
print('Destructor called, Grocery deleted.')
obj = Grocery()
del obj

Вихід:

"Продуктовий магазин" - це клас, визначений його спеціальними методами: конструктор та деструктор.

Отже, один раз можна побачити об’єкт класу «Бакалія». Він автоматично викликає __init__, який є конструктором класу. Однак, коли «del obj» виконується для видалення об'єкта, метод деструктора викликається автоматично.

Приклад №2

class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a

Вихід:

Текст - це клас, "a" - посилання на об'єкт до класу. "B" локальна копія цього посилання "a". Отже, коли b видалено, метод не викликається, оскільки він просто містить локальну копію.

Переваги Destructor в Python

Як було сказано раніше, деструктор використовується не стільки в python, скільки в Java, C ++. Однак концепція залишається такою ж. Ось деякі переваги його використання в програмах:

  • Потрібні об'єкти видаляються автоматично. Це звільняє простір пам'яті, який відомий як збір сміття.
  • Перевага полягає також у тому, що він викликає автоматично.

Певні кроки, над якими слід подбати під час використання деструктора:

1. Python не знає, в якому порядку знищення об'єктів буде безпечнішим, що може містити кругові посилання один на одного. Через це люди рекомендують використовувати "закрити" явно після кожної функції. Але у випадку винятків, керування методом закриття стає клопітким. Тому краще використовувати деструктори, маючи на увазі циклічні посилання.

2. Циклічні посилання, якщо це не справляється добре, є ймовірність протікання абстракцій, плюс поганий дизайн.
Найкраще: ресурси повинні оброблятися об'єктом найнижчого рівня класу.

3. Коли хтось гостро потребує використання циклічних посилань на об'єкти у складному коді, Python надає хороше рішення для нього у вигляді назви модуля: слабкі. Це означає, що референт надає слабкі посилання, що в кінцевому рахунку допомагає в реалізації кешу і більше не підтримує великий об'єкт живим. Коли великий об'єкт не живе, це означає, що він з’являється в кеші.

Розглянемо це через невеликий код, щоб зрозуміти зрозуміліше:

Код:

import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)

Вихід:

Як видно, "r" є слабкою посиланням на об'єкт "c".

Якщо ми зробимо метод посилання на "r", як c2 = r (). Тоді "с" і "с2" повинні бути однаковими, оскільки відноситься до одного і того ж. Дивіться приклад, показаний нижче:

У разі видалення основного об'єкта опорний об’єкт втрачає своє існування. Дивіться приклад, показаний нижче:

Як можна помітити, результати друку (r ()) - "Ні". В такому разі:
gc.collect () призведе до 0.

4. __del__ не слід плутати з del у python. __del__ - це спеціальний метод класу, який є деструктором і "del" використовується для знищення змінної, визначеної в середовищі python. Обидва - це дві абсолютно різні речі.

Подобається:

xx = 10
del xx

Висновок

Переглянувши вищезгаданий зміст, можна сказати, що конструктори та деструктори є важливою частиною Python. Деструктор відіграє ключову роль в управлінні пам'яттю, де виконує багато завдань з очищення об'єктів, які використовуються в програмуванні. Якщо мати справу з невеликими програмами, можливо, ви не отримаєте фактичної картини за допомогою деструкторів. Однак, маючи справу з програмами на рівні виробництва або будь-якими складними рядками коду, важливість деструкторів можна зрозуміти, оскільки використання пам'яті стає дуже важливим. Маючи на увазі, ідея циклічного посилання може абсолютно призвести до гарного дизайну під час роботи з деструкторами.

Рекомендовані статті

Це посібник із програми Destructor в Python. Тут ми обговорюємо синтаксис, переваги разом з різними прикладами деструктора python. Ви також можете переглянути наступні статті, щоб дізнатися більше -

  1. Анотація класу з Python
  2. Редактори Python
  3. Заява про розрив Python
  4. Обмін в Python
  5. Приклади обміну в PHP
  6. Заява про перерву в JavaScript
  7. Повне керівництво Destructor в PHP з прикладами