Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Saya Memerlukan Fail `__init__.py` untuk Pakej dalam Python 3.3 ?
Soalan:
Dalam Python 3.3 , adakah masih perlu mempunyai __init__. py fail semasa mengimport pakej?
Jawapan:
Tidak semestinya. Python 3.3 memperkenalkan konsep "Pakej Ruang Nama Tersirat," membenarkan pakej dibuat tanpa fail __init__.py. Ini dikenali sebagai pakej ruang nama, berbeza dengan pakej biasa yang mempunyai fail __init__.py.
Kes Penggunaan Pakej Ruang Nama Tersirat:
Pakej Ruang Nama digunakan secara khusus apabila berbilang perpustakaan berada di lokasi yang berbeza dan perlu menyumbangkan subpakej kepada pakej induk yang sama. Sebagai contoh, pertimbangkan struktur berikut:
google_pubsub/ # Package 1 google/ # Namespace package cloud/ # Namespace package pubsub/ # Regular package __init__.py foo.py google_storage/ # Package 2 google/ # Namespace package cloud/ # Namespace package storage/ # Regular package __init__.py bar.py
Tanpa pakej ruang nama, mengimport kedua-dua "google_pubsub" dan "google_storage" akan gagal kerana Python menganggap pakej biasa sebagai entiti serba lengkap. Dengan mengalih keluar fail __init__.py daripada direktori "google" dan "google/cloud", ia ditafsirkan sebagai pakej ruang nama, membenarkan jurubahasa Python mencari dan menyumbang modul dan subpakej kepada pakej "google".
Pakej Ruang Nama Biasa lwn.:
Dalam kebanyakan kes, disyorkan untuk kekal dengan biasa pakej dengan menggunakan fail __init__.py kosong. Ini kerana:
Kesimpulan:
Walaupun pakej ruang nama boleh berguna dalam spesifik senario, mereka harus digunakan dengan berhati-hati. Bagi kebanyakan pembangun dan kes penggunaan, pakej biasa dengan fail __init__.py ialah pendekatan yang disyorkan. Pertimbangkan pakej ruang nama hanya apabila terdapat keperluan tulen untuk berkongsi ruang nama antara berbilang direktori yang mengandungi subpakej.
Rujukan:
Atas ialah kandungan terperinci Adakah Saya Memerlukan Fail `__init__.py` untuk Pakej dalam Python 3.3 ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!