Rumah > pembangunan bahagian belakang > Tutorial Python > Contoh terperinci pemusnahan dan pelepasan objek kelas python

Contoh terperinci pemusnahan dan pelepasan objek kelas python

WBOY
Lepaskan: 2022-09-08 20:35:29
ke hadapan
2370 orang telah melayarinya

[Cadangan berkaitan: Tutorial video Python3 ]

1

Fungsi ini ialah pembina kelas Python Apabila mencipta objek kelas, fungsi ini akan dipanggil secara automatik untuk menetapkan beberapa maklumat permulaan dan tetapan objek semasa mencipta objek.
  • _init__ Fungsi ini adalah pemusnah kelas ular sawa Fungsi ini akan dipanggil secara automatik apabila kitaran hayat objek kelas tamat dan ia digunakan terutamanya untuk melepaskan beberapa sumber yang diduduki oleh objek .
  • __del__2. Demonstrasi Kod
1. Perubahan rujukan

adalah seperti berikut, dan kod pelaksanaan kelas demo ditulis.

Apabila objek kelas ini dicipta, ia akan memanggil fungsi

dan mencetak "kelas init"
>>> class demo():
...     def __init__(self):
...             print("init class")
...             print(self)
...     def __del__(self):
...             print("del class")
...             print(self)
... 
>>>
Salin selepas log masuk
Apabila objek kelas ini dimusnahkan, ia akan memanggil fungsi

dan cetak "del class". __init__
__del__Mula-mula gunakan pembolehubah a1 untuk merujuk objek kelas demo, kemudian cetak "kelas init" dan alamat objek yang dirujuk oleh pembolehubah a1

>>> a1 = demo()
init class
<__main__.demo instance at 0x7f328f7c6cb0>
>>> 
>>> a2 = demo()  
init class
<__main__.demo instance at 0x7f328f7c6d40>
>>> 
>>> 
>>> 
>>> a1 = demo()
init class
<__main__.demo instance at 0x7f328f7c6d88>
del class
<__main__.demo instance at 0x7f328f7c6cb0>
>>>
Salin selepas log masuk

Gunakan pembolehubah a2 untuk rujukan Objek kelas demo yang lain mencetak "kelas init" dan alamat objek yang dirujuk oleh pembolehubah a2 0x7f328f7c6cb0; 🎜>.

Akhirnya buat objek kelas demo dan gunakan pembolehubah a1 untuk menghalakannya semula Pada masa ini, a1 merujuk kepada objek kelas baharu, dan alamat rujukannya ialah 0x7f328f7c6d40, kerana objek

yang sebelum ini dirujuk oleh a1 tidak lagi Seseorang merujuk kepadanya, jadi ruang objek kelas demo lama dikeluarkan dan "

" dicetak. 0x7f328f7c6cb00x7f328f7c6d402. Objek kelas hanya dalam fungsi

0x7f328f7c6d88Tentukan fungsi create_demo Fungsi ini adalah untuk mencipta objek kelas demo dan menggunakan pembolehubah inst untuk merujuk kelas yang dibuat objek. 0x7f328f7c6cb0del class 0x7f328f7c6cb0Panggil fungsi create_demo() sekali Anda boleh melihat bahawa objek demo dibuat dan alamatnya ialah

, kemudian objek demo dikeluarkan dengan serta-merta; fungsi create_demo, fungsi itu tamat Objek demo dikitar semula dan dikeluarkan.

Panggil fungsi create_demo() sekali lagi, fenomenanya adalah sama: objek demo dicipta dengan alamat
>>> def create_demo():
...     inst = demo()
... 
>>> create_demo()
init class
<__main__.demo instance at 0x7f328f7c6cb0>
del class
<__main__.demo instance at 0x7f328f7c6cb0>
>>> 
>>> 
>>> 
>>> create_demo()
init class
<__main__.demo instance at 0x7f328f7c6cb0>
del class
<__main__.demo instance at 0x7f328f7c6cb0>
>>> 
>>> 
>>> 
>>> create_demo()
init class
<__main__.demo instance at 0x7f328f7c6cb0>
del class
<__main__.demo instance at 0x7f328f7c6cb0>
>>>
Salin selepas log masuk
kemudian objek demo dikeluarkan serta-merta.

3. Objek kelas dikembalikan dalam fungsi

0x7f328f7c6cb0

Tentukan fungsi return_demo, yang mencipta objek kelas secara dalaman dan mengembalikan objek kelas yang dicipta.

0x7f328f7c6cb0

Seperti yang anda lihat, apabila fungsi return_demo() dipanggil buat kali pertama, kandungan yang dicetak menunjukkan bahawa objek dicipta pada masa ini, dan alamat objek ialah

; function return_demo menggunakan pernyataan

secara dalaman untuk mengembalikan objek kelas Dicipta, jadi apabila fungsi kembali, objek tidak akan dikeluarkan
>>> def return_demo():
...     return demo()
...
Salin selepas log masuk
.

Seterusnya, laksanakan pernyataan Python:
>>> True
True
>>> return_demo()
init class
<__main__.demo instance at 0x7fc511eb8cb0>
<__main__.demo instance at 0x7fc511eb8cb0>
>>> 
>>> True
del class
<__main__.demo instance at 0x7fc511eb8cb0>
True
>>> 
>>> return_demo()
init class
<__main__.demo instance at 0x7fc511eb8cb0>
<__main__.demo instance at 0x7fc511eb8cb0>
>>> 
>>> 
>>> 
>>> True
del class
<__main__.demo instance at 0x7fc511eb8cb0>
True
>>> 
>>>
Salin selepas log masuk
dan lihat objek

dilepaskan. Kerana selepas atur cara melaksanakan fungsi return_demo(), didapati bahawa atur cara seterusnya tidak merujuk objek yang dikembalikan oleh return_demo(), jadi Python akan melepaskan ruang objek 0x7fc511eb8cb0. return0x7fc511eb8cb0Lakukan operasi yang sama untuk kali kedua dan anda boleh melihat fenomena yang sama.

TrueFenomena segmen kod ini pada asasnya sama seperti segmen kod sebelumnya. 0x7fc511eb8cb00x7fc511eb8cb0Seperti yang anda lihat, v1_demo dan v2_demo merujuk kepada objek kelas, jadi nilai v1_demo dan v2_demo tidak lagi

.

Akhir sekali, kami mendapat v1_demo kembali ke
>>> v1_demo = None
>>> v2_demo = None 
>>> print(v1_demo)
None
>>> print(v2_demo)
None
>>> True
True
>>> 
>>> v1_demo = return_demo() 
init class
<__main__.demo instance at 0x7fc511eb8d88>
>>> 
>>> print(v1_demo)
<__main__.demo instance at 0x7fc511eb8d88>
>>> 
>>> True
True
>>> 
>>> 
>>> v2_demo = return_demo()  
init class
<__main__.demo instance at 0x7fc511eb8dd0>
>>> 
>>> print(v2_demo)
<__main__.demo instance at 0x7fc511eb8dd0>
>>> True
True
>>> 
>>> 
>>> 
>>> 
>>> v1_demo = None
del class
<__main__.demo instance at 0x7fc511eb8d88>
>>> 
>>> print(v1_demo)
None
>>>
Salin selepas log masuk
. Pada masa ini, objek

yang dirujuk oleh v1_demo dikeluarkan.

1. Gunakan pembolehubah global untuk merujuk objek kelas di dalam fungsi None

[Cadangan berkaitan: NoneTutorial video Python30x7fc511eb8d88]

Atas ialah kandungan terperinci Contoh terperinci pemusnahan dan pelepasan objek kelas python. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:jb51.net
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan