Rumah >pembangunan bahagian belakang >Tutorial Python >Adakah Saya Memerlukan Fail `__init__.py` untuk Pakej dalam Python 3.3 ?

Adakah Saya Memerlukan Fail `__init__.py` untuk Pakej dalam Python 3.3 ?

Susan Sarandon
Susan Sarandonasal
2024-12-03 08:30:11337semak imbas

Do I Need `__init__.py` Files for Packages in Python 3.3 ?

Pakej Ruang Nama 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:

  • Pakej biasa lebih mudah diramal dan lebih mudah diselenggara.
  • Banyak alat dan perpustakaan Python mengharapkan pakej biasa berfungsi dengan baik.

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:

  • [PEP 420 - Ruang Nama Tersirat Pakej](https://www.python.org/dev/peps/pep-0420/)
  • [Dokumen Python - Pakej Biasa](https://docs.python.org/3/reference/ import.html#packages)
  • [Python Docs - Namespace Pakej](https://docs.python.org/3/reference/import.html#namespace-packages)
  • [Perangkap untuk Yang Tidak Waspada dalam Sistem Import Python](https://www.python. org/doc/essays/import-traps/)

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!

Kenyataan:
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