Разрушител в Python - Различни примери с неговите предимства

Съдържание:

Anonim

Въведение в Destructor в Python

Конструкторите и разрушителите са две важни концепции в python. Конструкторите се извикват, когато обектът на клас е създаден. Деструкторите обаче се извикват, когато обектът от клас е унищожен. Следователно, не е грешно да се каже, Конструктори, са обратното на Destructors. Python, като обектно-ориентиран език за програмиране, Constructors и Destructors също е част от този език.

Разрушителите не се използват в python толкова, колкото Java и C ++. Но знаейки това прави още по-силна база в python.

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

Ключова дума, използвана за дефиниране на Destructor, е: ключова дума __del __ ():

Синтаксис:

def __del__(self):
#destructor body

Както се вижда, __del__ е ключовата дума, използвана за дефиниране на деструктор. Когато се извика, всички препратки към този обект се изтриват, което също е известно като събиране на боклука.

Примери за Destructor в 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 предоставя добро решение за него под формата на име на модул: slabref. Това означава, че към референта са предоставени слаби препратки, което в крайна сметка помага при внедряването на кеш и вече не поддържа живия обект жив. Когато голям обект не е жив, това означава, че се появява в кеша.

Нека го видим чрез малък код, за да разберем ясно:

Код:

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 играе основна роля в управлението на паметта, където изпълнява много задачи за почистване на обекти, използвани в програмирането. Работата с малки програми може да не ви даде реалната картина зад използването на деструктори. Въпреки това, докато се занимаваме с програми на ниво производство или с каквито и да е сложни редове от код, важността на разрушителите може да се разбере ясно, тъй като използването на памет става много важно там. Имайки предвид идеята за циклична справка, може абсолютно да доведе до добър дизайн по време на работа с деструктори.

Препоръчителни статии

Това е ръководство за Destructor в Python. Тук обсъждаме синтаксиса, предимствата, заедно с различните примери за разрушител на python. Можете също да разгледате следните статии, за да научите повече -

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