Разрушитель в Python - Различные примеры со своими преимуществами

Содержание:

Anonim

Введение в деструктор в Python

Конструкторы и деструкторы - это две важные концепции в Python. Конструкторы вызываются при создании объекта класса. Однако деструкторы вызываются, когда объект класса уничтожается. Следовательно, не стоит говорить, что Конструкторы являются противоположностью Деструкторов. Python, будучи объектно-ориентированным языком программирования, Constructors and Destructors также является частью этого языка.

Деструкторы не так широко используются в Python, как Java и C ++. Но зная, что это делает еще сильнее в Python.

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

Ключевое слово, используемое для определения Destructor: ключевое слово __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 удаляется, метод не вызывается, так как он просто содержит локальную копию.

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

Как уже было сказано, деструктор не так часто используется в Python, как в Java, C ++. Однако концепция остается прежней. Вот некоторые преимущества использования его в программах:

  • Ненужные объекты удаляются автоматически. Это освобождает пространство памяти, которое называется сборкой мусора.
  • Преимущество также заключается в том, что он запускается автоматически.

Некоторые шаги, о которых следует позаботиться при использовании деструктора:

1. Python не знает порядок, в котором разрушающиеся объекты будут безопаснее, поскольку они могут содержать циклические ссылки друг на друга. Из-за этого люди рекомендуют использовать «close» явно после каждой функции. Но в случае возникновения исключений метод управления close становится проблематичным. Следовательно, лучше использовать деструкторы, имея в виду циклические ссылки.

2. Циклические ссылки, если они не обрабатываются должным образом, есть вероятность утечек абстракций плюс плохой дизайн.
Лучше всего: ресурсы должны обрабатываться объектом самого низкого уровня класса.

3. Когда кому-то крайне необходимо использовать циклические ссылки на объекты в сложном коде, Python предоставляет хорошее решение в виде имени модуля: weakref. Это означает, что слабые ссылки предоставляются референту, что в конечном итоге помогает реализовать кеш и больше не поддерживать большой объект живым. Когда большой объект не жив, это означает, что он появляется в кеше.

Давайте посмотрим на это через небольшой код, чтобы получить ясное понимание:

Код:

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» должны быть одинаковыми, поскольку относится к одному и тому же. Смотрите пример, показанный ниже:

В случае удаления основного объекта ссылочный объект теряет свое существование. Смотрите пример, показанный ниже:

Как можно заметить, print (r ()) приводит к «None». В этом случае:
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. Полное руководство по деструктору в PHP с примерами