Seringkali di perpustakaan Python pribadi saya, saya melakukan sesuatu seperti ini:
class MyClass:
# ...
def plot(self):
import someGraphicsLibrary as graphicslib
graphicslib.plot(self.data)
Alasannya adalah bahwa menginisialisasi someGraphicsLibrary
membutuhkan waktu, hingga beberapa detik untuk salah satu perpustakaan yang saya gunakan. Saya tidak selalu perlu memplot hasil saya ketika saya menggunakan kelas ini, jadi masuk akal untuk tidak mengimpornya sampai waktu itu benar-benar digunakan, jika sama sekali.
Ini sepertinya bekerja dengan baik, tapi saya rasa saya belum melihatnya dalam kode orang lain. Jadi pertanyaan saya hanyalah apakah ini dianggap praktik yang baik. Apakah ada jebakan tersembunyi yang diharapkan saat melakukan hal-hal seperti ini?
Jawaban:
Ini biasanya bukan praktik yang baik, karena beberapa alasan:
Namun, terkadang ini adalah Ide yang Baik, misalnya:
numpy
Anda__array__()
. Tetapi Anda mungkin tidak ingin bergantung padanumpy
fungsionalitas lain dari modul Anda, jadi lebih baik mengimpornumpy
saja__array__()
untuk menghindari mengambil ketergantungan tambahan saat itu tidak diperlukan. Ini tidak mengalami masalah 1 dan 2 karenanumpy
sudah pernah diimpor satu kali sebelumnya (ini adalah hal yang memanggil__array__()
sejak awal!), Dan itu tidak menderita masalah 3 karenanumpy
bukan dependensi "nyata" dari modul Anda.import pdb; pdb.set_trace()
. Anda tidak ingin meletakkanimport pdb
di bagian atas modul karena breakpoint adalah baris sementara kode yang akan dihapus, dan memindahkan impor jauh akan membuat hal itu sulit. Ini sudah usang ketika builtinbreakpoint()
ditambahkan, jadi sekarang Anda tidak perlu impor inline.sumber
MyClass
bukan kata benda yang berarti, jadi saya pikir Anda melompat ke kesimpulan.