Jika 'eksplisit lebih baik daripada implisit', mengapa tidak ada pengubah akses eksplisit di Python: Publik, Terlindungi, Pribadi, dll.?
Saya tahu bahwa idenya adalah programmer harus tahu apa yang harus dilakukan melalui petunjuk - tidak perlu menggunakan 'brute force'. Tetapi 'Enkapsulasi' atau 'penyembunyian informasi' IMO tidak hanya untuk mengusir orang, ini adalah masalah organisasi dan struktur: lapisan pengembangan Anda harus memiliki lingkup dan batas yang jelas dan dibatasi sendiri, seperti halnya sistem fisik.
Dapatkah seseorang tolong bantu saya di sini dengan penjelasan yang kuat tentang mengapa pembatasan akses tersirat daripada eksplisit dalam Python, sebuah bahasa yang tampaknya dekat dengan sempurna?
Sunting: Sejauh ini saya telah melihat 3 jawaban yang diajukan, dan saya menyadari bahwa ada 2 bagian dari pertanyaan saya:
Mengapa tidak ada kata kunci, misalnya
private def myFunc(): dostuff....
bukannya IMO garis bawah jelek dan sulit untuk mengetik. Tapi itu bukan poin penting.
Lebih penting:
Mengapa pengubah akses ini hanya 'rekomendasi' atau petunjuk dan tidak ditegakkan. Akan sulit untuk mengubahnya nanti? Sangat mudah untuk mengubah 'dilindungi' menjadi 'publik' - dan jika Anda memiliki rantai pewarisan yang berbelit-belit yang menyulitkan, Anda memiliki desain yang buruk - desain Anda harus disempurnakan daripada mengandalkan fitur bahasa yang membuatnya mudah untuk ditulis kode terstruktur dengan buruk.
Ketika pengubah akses diberlakukan, kode Anda secara otomatis akan dikotak-kotakkan - Anda TAHU bahwa segmen-segmen tertentu berada di luar jangkauan sehingga Anda tidak perlu menghadapinya kecuali jika dan ketika diperlukan. Dan, jika desain Anda tidak bagus dan Anda menemukan diri Anda terus-menerus memindahkan barang ke dalam dan keluar dari lingkup yang berbeda, bahasa tersebut dapat membantu Anda untuk membersihkan tindakan Anda.
Seperti saya mencintai Python, saya menemukan poin ke-2 ini menjadi kekurangan serius. Dan saya belum melihat jawaban yang bagus untuk ini.
private def whatever
adalah, itu class x: def whatever(self): pass
adalah jalan pintas untuk class x: pass; x.whatever = lambda self: pass
, jadi pada dasarnya, Anda akan memerlukan modifikator pribadi untuk penugasan