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