Вступ до 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. Ви також можете переглянути наступні статті, щоб дізнатися більше -
- Анотація класу з Python
- Редактори Python
- Заява про розрив Python
- Обмін в Python
- Приклади обміну в PHP
- Заява про перерву в JavaScript
- Повне керівництво Destructor в PHP з прикладами