Dengan python, apakah lebih baik mendefinisikan modul dengan fungsi atau modul dengan kelas yang berisi fungsi? [Tutup]

13

Dalam kode saya salah satu dari dua opsi di atas akan bekerja dengan baik, tetapi saya tertarik untuk mengetahui pro dan kontra dari kedua pendekatan.

TK100
sumber

Jawaban:

9

Jujur tergantung pada kebutuhan Anda. Sebagian besar waktu modul fungsi akan menjadi apa yang Anda cari.

Kelas python (imho) tidak boleh dianggap seperti kelas di C # atau C ++ atau Java, harus ada alasan logis untuk mengelompokkan satu set fungsi ke induk yang lebih besar, struktur data akan menjadi contoh yang baik dari ini, Anda ingin seperangkat fungsi kongruen yang berlaku langsung ke kelas, bukan kumpulan fungsi yang dikumpulkan secara longgar yang bertujuan umum.

  • Modul Fungsi: tujuan umum, utilitas, dan lebih banyak fungsi "global"
  • Modul Kelas Fungsi: kelas yang dikelompokkan dengan kebutuhan yang sama, tipe data daftar tertaut yang berbeda atau fungsi pemrosesan audio atau tipe pohon yang berbeda.

Modul adalah untuk pengelompokan hierarkis keseluruhan sistem yang sama, saya biasanya memiliki semua fungsi utilitas di bawah satu modul, semua data di bawah yang lain, lapisan data saya dan konektor di bawah modul tipe "induk". Karena sebuah modul hanyalah pengelompokan mental, ini kurang tentang jenis sistem apa yang ada di dalamnya (kelas atau fungsi, sejujurnya mungkin campuran keduanya) dan lebih banyak tentang koneksi logis antara sistem di bawah modul.

Jeff Langemeier
sumber
6
Saya tidak mengerti perbedaan antara kelas Python dan bahasa lainnya. Dalam bahasa apa Anda akan memiliki kelas dengan fungsi yang tidak memiliki alasan logis untuk dikelompokkan?
Guy Sirton
7

Pertanyaan mendasarnya adalah apakah Anda perlu memiliki instance berbeda dari modul / kelas Anda. modul python seperti singleton - Anda selalu merujuk ke objek yang sama , yaitu jika Anda membutuhkan instance, Anda memerlukan kelas.

Namun, jika Anda tidak membutuhkan instance, Anda mungkin masih perlu mengatur "objek" Anda ke keadaan awal. sementara ini jelas mungkin dengan modul polos, jika inisialisasi lebih kompleks daripada hanya menetapkan beberapa nilai, saya akan menyarankan untuk menginisialisasi kode dalam metode kelas __init__agar mudah dibaca.

kr1
sumber
2
mungkin perlu menunjukkan bahwa Anda mungkin berbicara tentang sesuatu yang memiliki status, misalnya modul dengan variabel global vs kelas dengan variabel anggota. jika kelas Anda hanya memiliki metode tetapi tidak ada keadaan, ada sedikit alasan untuk memiliki beberapa instance
thbusch
3
@ thbusch, ya, ini tersirat dalam membutuhkan instance .
kr1
Ketika Anda berbicara tentang perlunya sebuah instance yang membuat saya mengerti modul vs kelas. Seperti jika saya perlu membuat beberapa mobil maka sebuah kelas akan sesuai dengan modul kalkulator di mana saya tidak perlu membuat banyak kalkulator, saya hanya perlu menggunakan metode tambah dan kurangi dari modul itu.
tazboy