Ini "menggarisbawahi" tampaknya banyak terjadi, dan saya bertanya-tanya apakah ini adalah persyaratan dalam bahasa Python, atau hanya masalah konvensi?
Juga, bisakah seseorang memberi nama dan menjelaskan fungsi mana yang cenderung memiliki garis bawah, dan mengapa ( __init__
, misalnya)?
python
function
methods
double-underscore
Chuck Testa
sumber
sumber
Jawaban:
From the Python PEP 8 - Panduan Gaya untuk Kode Python :
Perhatikan bahwa nama dengan menggarisbawahi garis depan dan belakang ganda pada dasarnya dicadangkan untuk Python: "Jangan pernah menciptakan nama-nama seperti itu; gunakan saja itu seperti yang didokumentasikan".
sumber
__double_leading_underscore
masih bersifat publik , variabel diubah namanya untuk menghindari bentrokan.Responden lain benar dalam menggambarkan garisbawah ganda memimpin dan tertinggal sebagai konvensi penamaan untuk metode "khusus" atau "ajaib".
Meskipun Anda dapat memanggil metode ini secara langsung (
[10, 20].__len__()
misalnya), keberadaan garis bawah adalah petunjuk bahwa metode ini dimaksudkan untuk dipanggil secara tidak langsung (len([10, 20])
misalnya). Sebagian besar operator python memiliki metode "sihir" yang terkait (misalnya,a[x]
adalah cara yang biasa digunakana.__getitem__(x)
).sumber
Nama-nama yang dikelilingi oleh dua garis bawah adalah "spesial" untuk Python. Mereka terdaftar di Referensi Bahasa Python, bagian 3, "Model data" .
sumber
Sebenarnya saya menggunakan nama metode _ ketika saya harus berbeda antara nama kelas orang tua dan anak. Saya telah membaca beberapa kode yang menggunakan cara ini untuk membuat kelas orangtua-anak. Sebagai contoh saya dapat memberikan kode ini:
...
dan anak yang memiliki metode _pekerja
...
sumber
Konvensi ini digunakan untuk variabel atau metode khusus (disebut "metode ajaib") seperti
__init__
dan__len__
. Metode-metode ini menyediakan fitur sintaksis khusus atau melakukan hal-hal khusus.Misalnya,
__file__
menunjukkan lokasi file Python,__eq__
dieksekusi ketikaa == b
ekspresi dieksekusi.Seorang pengguna tentu saja dapat membuat metode khusus khusus, yang merupakan kasus yang sangat jarang, tetapi sering dapat memodifikasi beberapa metode khusus bawaan (misalnya Anda harus menginisialisasi kelas dengan
__init__
yang akan dieksekusi pada awalnya ketika turunan sebuah kelas dibuat).sumber
Menambahkan contoh untuk memahami penggunaan __ dalam python. Berikut adalah daftar Semua __
https://docs.python.org/3/genindex-all.html#_
Pembatasan akses menggunakan __
sumber