Bagaimana saya harus mengatur kode sumber Python? [Tutup]

99

Saya memulai dengan Python (sudah saatnya saya mencobanya), dan saya mencari beberapa praktik terbaik.

Proyek pertama saya adalah antrian yang menjalankan eksperimen baris perintah di beberapa utas. Saya mulai mendapatkan main.pyfile yang sangat panjang , dan saya ingin memecahnya. Secara umum, saya mencari: Bagaimana programmer python mengatur banyak file sumber? Apakah ada struktur tertentu yang cocok untuk Anda?

Pertanyaan spesifik saya meliputi:

  1. Haruskah setiap kelas berada dalam file terpisah?
  2. Bagaimana saya harus mengatur pengujian unit relatif terhadap kode sumber?
  3. Di mana saya harus meletakkan komentar dokumen, khususnya untuk operasi baris perintah?
  4. Jika saya menggunakan beberapa direktori, bagaimana cara mengimpor kelas di antara mereka?

Saya mungkin bisa menarik beberapa kesimpulan saya sendiri di sini dengan coba-coba, tetapi saya lebih suka memulai dari sesuatu yang baik .

Andres Jaan Tack
sumber
4
Ini akan menjelaskan beberapa hal tentang mengatur kode Anda docs.python.org/tutorial/modules.html
Nikola Smiljanić
2
Berikut ini beberapa info berguna dari dokumen python. <br> docs.python.org/3/tutorial/modules.html#packages
rda3mon
11
Pertanyaan ini sedang mencari konvensi yang diterima secara luas khususnya di komunitas Python. Jawabannya bukanlah masalah pendapat, meskipun seperti kebanyakan jawaban, hal itu dapat berubah seiring waktu. Saya sarankan ini dibuka kembali atau paling tidak jawaban aslinya tidak dihapus.
Andres Jaan Tack

Jawaban:

32

The Artikel Eric menunjuk ke mengagumkan karena mencakup rincian mengatur kode basis Python besar.

Jika Anda telah mendarat di sini dari Google dan mencoba mencari tahu cara membagi satu file sumber besar menjadi beberapa file yang lebih mudah dikelola, saya akan meringkas prosesnya secara singkat.

Asumsikan Anda saat ini memiliki semua yang ada di file bernama main.py:

  • Buat file sumber lain di folder yang sama (sebut saja milik kita utils.pyuntuk contoh ini)
  • Pindahkan kelas, fungsi, pernyataan, dll. Yang Anda butuhkan dari main.pyke dalamutils.py
  • Dalam main.pymenambahkan satu baris di atas:import utils

Secara konseptual apa yang dilakukan ini adalah membuat modul baru yang disebut utilsdalam file sumber lain. Anda kemudian dapat mengimpornya di mana pun diperlukan.

Drew Noakes
sumber
Apakah Anda kebetulan ingat artikel yang Eric tunjuk? Saya tidak dapat menemukan Eric dalam pertanyaan / jawaban ini
Daniel Rucci
7
@DanR, ya, ini artikelnya . Untuk beberapa alasan moderator menghapus jawabannya, meskipun mendapat 56 suara positif.
Drew Noakes
1
@DrewNoakes: Saya pikir itu dihapus karena hanya link jawaban; jika saja dia telah merangkum poin utama artikel tersebut.
smci
1
Sayangnya artikel tersebut adalah tautan mati sekarang :-(. Versi arsip terbaru ada di sini: web.archive.org/web/20190714164001/http://…
Igor Brejc
7

Cara Anda mengatur kode dan pengujian sama persis dengan yang Anda lakukan untuk bahasa OO apa pun.

Jawaban dari cara saya melakukannya. Ini mungkin tidak benar tapi berhasil untuk saya

  1. Tergantung bagaimana fungsionalitas Anda dibagi. Untuk aplikasi python utama saya, saya memiliki 1 file dengan kelas untuk titik masuk dan kemudian paket dengan bit fungsionalitas yang berbeda
  2. Saya menggunakan PyDev untuk gerhana dan mengaturnya seperti yang saya lakukan untuk Java.
>  Workspace
>     |
>     |-Src
>     |   |-Package1
>     |   |-Package2
>     |   |-main.py
>     |-Test
>         |-TestPackage1
>         |-TestPackage2
  1. Gunakan DocString di mana saja untuk melacak semuanya
  2. Setelah memastikan bahwa __init__.pyfile yang relevan ada di folder. ini hanya kasus sederhanafrom module import class
AutomatedTester
sumber
5
Satu peringatan, meskipun: java mengambil semacam hubungan diktator dengan paket, file dan kelas. Kadang-kadang saya mendapatkan lebih banyak file sumber daripada yang saya inginkan. Konvensi dari beberapa organisasi - misalnya - hindari (bersarang) kelas dalam atau kelas "pembantu" yang lebih rendah dalam file - memperburuk ini, di luar persyaratan kompiler. Jaga agar tetap teratur, dan hierarki berguna, tetapi cobalah untuk menghindari make-work.
Roboprog