Wprowadzenie do Destructor w Pythonie
Konstruktory i Destructors to dwie ważne koncepcje w Pythonie. Konstruktory są wywoływane podczas tworzenia obiektu klasy. Jednak Niszczyciele są wywoływane, gdy obiekt klasy zostanie zniszczony. Dlatego nie jest błędem stwierdzenie, że Konstruktory są przeciwieństwem Niszczycieli. Python, będąc obiektowym językiem programowania, Constructors and Destructors jest również częścią tego języka.
Destruktory nie są używane w Pythonie tak bardzo jak Java i C ++. Ale wiedza o tym czyni jeszcze silniejszą bazę w pythonie.
Niszczyciele mogą okazać się bardzo przydatne, jeśli chodzi o zdrowie psychiczne programu. Na przykład: zwalnianie zużytych zasobów przed wyjściem z programu, takie jak zwalnianie pamięci, zamykanie plików itp.
Słowo kluczowe użyte do zdefiniowania Destructor to: __del __ () słowo kluczowe:
Składnia:
def __del__(self):
#destructor body
Jak widać, __del__ jest słowem kluczowym używanym do definiowania destruktora. Po wywołaniu usuwa się wszystkie odniesienia do tego obiektu, co jest również znane jako odśmiecanie.
Przykłady Destructor w Pythonie
Zobaczmy różne przykłady destruktora w pythonie, aby lepiej zrozumieć:
Przykład 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
Wynik:
„Sklep spożywczy” to klasa zdefiniowana za pomocą specjalnych metod: konstruktor i destruktor.
Można więc zobaczyć, kiedy zostanie utworzony obiekt klasy „Sklep spożywczy”. Automatycznie wywołuje __init__, który jest konstruktorem klasy. Jednak gdy „del obj” zostanie wykonane w celu usunięcia obiektu, metoda destruktor zostanie wywołana automatycznie.
Przykład nr 2
class Text:
def __del__(self):
print "Text deleted"
a = Text()
del a
a = Text()
b = a
del b
del a
Wynik:
Tekst to klasa, „a” to odwołanie do obiektu w klasie. „B” lokalna kopia tego odniesienia „a”. Więc kiedy b zostanie usunięte, metoda nie zostanie wywołana, ponieważ po prostu przechowuje lokalną kopię.
Zalety Destructor w Pythonie
Jak powiedziano wcześniej, destruktor nie jest tak często używany w Pythonie, jak jest używany w Javie, C ++. Jednak koncepcja pozostaje taka sama. Oto kilka zalet używania go w programach:
- Niepotrzebne obiekty są automatycznie usuwane. To zwalnia miejsce w pamięci, które jest znane jako zbieranie śmieci.
- Zaletą jest także to, że wywołuje się automatycznie.
Podczas korzystania z destruktora należy podjąć pewne kroki:
1. Python nie zna kolejności, w której niszczenie obiektów będzie bezpieczniejsze, i może przechowywać do siebie okrągłe odniesienia. Z tego powodu ludzie zalecają jawne używanie funkcji „zamknij” po każdej funkcji. Ale w przypadku wystąpienia wyjątków zarządzanie metodą close staje się kłopotliwe. Dlatego lepsze jest stosowanie destruktorów, biorąc pod uwagę cykliczne odniesienia.
2. Cykliczne odniesienia, jeśli nie da się dobrze sobie z nimi poradzić, są szanse na nieszczelne abstrakcje i zły projekt.
Najlepszą rzeczą jest: zasoby powinny być obsługiwane przez obiekt najniższego poziomu klasy.
3. Gdy ktoś naprawdę potrzebuje cyklicznych odwołań do obiektów w złożonym kodzie, Python zapewnia dobre rozwiązanie w postaci nazwy modułu: słabyref. Oznacza to, że do referencji dostarczane są słabe odwołania, co ostatecznie pomaga w implementacji pamięci podręcznej i nie utrzymuje już dużego obiektu przy życiu. Gdy duży obiekt nie żyje, oznacza to, że pojawia się w pamięci podręcznej.
Zobaczmy to przez mały kod, aby uzyskać jasne zrozumienie:
Kod:
import weakref
class C:
def method(self):
print("Hi!method called!")
c = C()
r = weakref.ref(c)
print(c)
print(r)
Wynik:
Jak widać „r” jest słabym odniesieniem do obiektu „c”.
Jeśli zrobimy metodę odwołującą się do „r”, taką jak c2 = r (). Zatem „c” i „c2” powinny być takie same, ponieważ odnoszą się do tego samego. Zobacz przykład pokazany poniżej:
W przypadku usunięcia głównego obiektu obiekt referencyjny traci swoje istnienie. Zobacz przykład pokazany poniżej:
Jak można zauważyć, wyniki drukowania (r ()) to „Brak”. W tym wypadku:
gc.collect () spowoduje 0.
4. __del__ nie powinien mylić się z del w pythonie. __del__ to specjalna metoda klasy, która jest destruktorem, a „del” służy do niszczenia zmiennej zdefiniowanej w środowisku python. Obie są dwiema zupełnie różnymi rzeczami.
Lubić:
xx = 10
del xx
Wniosek
Po przejrzeniu powyższej zawartości możemy powiedzieć, że konstruktory i destruktory są kluczową częścią Pythona. Destructor odgrywa kluczową rolę w zarządzaniu pamięcią, gdzie wykonuje wiele zadań czyszczenia obiektów używanych w programowaniu. Radzenie sobie z małymi programami może nie dać rzeczywistego obrazu za pomocą destruktorów. Jednak podczas zajmowania się programami na poziomie produkcyjnym lub dowolnymi złożonymi liniami kodu znaczenie destrukterów można zrozumieć, ponieważ wykorzystanie pamięci staje się tam bardzo ważne. Pamiętając o tym, że cykliczne odniesienia mogą absolutnie prowadzić do dobrego projektu podczas pracy z destruktorami.
Polecane artykuły
To jest przewodnik po Destructor w Pythonie. Tutaj omawiamy składnię, zalety wraz z różnymi przykładami Pythona Destruktor. Możesz także przejrzeć następujące artykuły, aby dowiedzieć się więcej -
- Klasa abstrakcyjna w Pythonie
- Edytory Python
- Instrukcja Break Python
- Zamiana w Pythonie
- Przykłady zamiany w PHP
- Instrukcja Break w JavaScript
- Kompletny przewodnik po Destructor w PHP z przykładami