Saya mencoba mengatur beberapa modul untuk saya gunakan sendiri. Saya punya sesuatu seperti ini:
lib/
__init__.py
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
Di lib/__init__.py
, saya ingin mendefinisikan beberapa kelas yang akan digunakan jika saya mengimpor lib. Namun, saya tidak bisa memahaminya tanpa memisahkan kelas ke dalam file, dan mengimpornya __init__.py
.
Daripada mengatakan:
lib/
__init__.py
settings.py
helperclass.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib.helperclass import Helper
Saya ingin sesuatu seperti ini:
lib/
__init__.py #Helper defined in this file
settings.py
foo/
__init__.py
someobject.py
bar/
__init__.py
somethingelse.py
from lib.settings import Values
from lib import Helper
Apakah mungkin, atau apakah saya harus memisahkan kelas ke file lain?
EDIT
Oke, jika saya mengimpor lib dari skrip lain, saya dapat mengakses kelas Helper. Bagaimana saya dapat mengakses kelas Helper dari settings.py?
Contoh di sini menjelaskan Referensi Intra-Paket. Saya mengutip "submodul sering kali perlu merujuk satu sama lain". Dalam kasus saya, lib.settings.py membutuhkan Helper dan lib.foo.someobject membutuhkan akses ke Helper, jadi di mana saya harus mendefinisikan kelas Helper?
Jawaban:
'
lib/
'S direktori induk harus dalamsys.path
.'
lib/__init__.py
' Anda mungkin terlihat seperti ini:Maka contoh berikut akan berfungsi:
Jawaban untuk versi pertanyaan yang sudah diedit:
__init__.py
menentukan tampilan paket Anda dari luar. Jika Anda perlu menggunakanHelper
disettings.py
maka tentukanHelper
di file yang berbeda misalnya, 'lib/helper.py
'.Perintah:
Keluaran:
sumber
Jika
lib/__init__.py
mendefinisikan kelas Helper maka di settings.py Anda dapat menggunakan:Ini berhasil karena. adalah direktori saat ini, dan bertindak sebagai sinonim untuk paket lib dari sudut pandang modul pengaturan. Perhatikan bahwa tidak perlu mengekspor Helper melalui
__all__
.(Dikonfirmasi dengan python 2.7.10, berjalan di Windows.)
sumber
Anda hanya menempatkannya di __init__.py.
Jadi dengan test / class.py menjadi:
... dan uji / __ init__.py menjadi:
Anda dapat mengimpor tes dan memiliki akses ke A, B, dan Helper
sumber
Tambahkan sesuatu seperti ini ke
lib/__init__.py
from .helperclass import Helper
sekarang Anda dapat mengimpornya secara langsung:
from lib import Helper
sumber
Sunting, karena saya salah paham dengan pertanyaan:
Masukkan saja
Helper
kelasnya__init__.py
. Itu benar-benar pythonic. Rasanya aneh datang dari bahasa seperti Java.sumber
Ya, itu mungkin. Anda mungkin juga ingin menentukan
__all__
dalam__init__.py
file. Ini adalah daftar modul yang akan diimpor saat Anda melakukannyasumber
Mungkin ini bisa berhasil:
sumber