Pada Chapter Membuat Module Sendiri kita meninggalkan satu masalah menggantung: file statistik.py berisi kode uji yang ikut tereksekusi setiap kali module tersebut diimpor. Kita ingin file itu punya dua wajah sekaligus — menjadi program penuh saat dijalankan langsung, tetapi hanya menyediakan function saat diimpor. Python menyelesaikan kebutuhan ini dengan satu variabel khusus bernama __name__ dan pola if __name__ == "__main__": yang menjadi salah satu idiom paling terkenal di dunia Python. Pada Chapter ini kita buktikan mekanismenya dengan eksperimen langsung, lalu menerapkannya pada module konversi suhu.

Variabel Khusus name #

Interpreter Python mengisi variabel __name__ pada setiap module dengan aturan yang menentukan segalanya:

  • Bila file dijalankan langsung, __name__ diisi string "__main__".
  • Bila file diimpor, __name__ diisi nama module itu sendiri.

Kita buktikan dengan file demo_nama.py satu baris:

python
print("Nilai __name__ saat file ini dijalankan langsung:", __name__)

Jalankan langsung dari terminal:

bash
$ python3 demo_nama.py
Nilai __name__ saat file ini dijalankan langsung: __main__

Sekarang buat program.py yang mengimpor module yang sama:

python
import demo_nama

print("program.py tetap berjalan sampai selesai")

Output yang Dihasilkan:

text
Nilai __name__ saat file ini dijalankan langsung: demo_nama
program.py tetap berjalan sampai selesai

File yang sama, isi __name__ berbeda. Mari kita bedah dua eksekusi tersebut:

  1. python3 demo_nama.py: interpreter memuat demo_nama.py sebagai main module — module utama yang menjadi titik masuk program — dan menetapkan __name__-nya ke "__main__".
  2. python3 program.py: program.py menjadi main module, sedangkan demo_nama dimuat sebagai module biasa; variabel __name__ milik demo_nama kini berisi "demo_nama". Kalimat di baris pertama output memang masih memakai kata “dijalankan langsung” — teks itu hanyalah bagian dari string yang kita cetak, bukan pernyataan yang benar pada eksekusi kedua.

Alur keputusannya ringkas:

Pola if name == “main” #

Dengan aturan __name__, kode program bisa kita kurung agar hanya berjalan pada eksekusi langsung. Berikut module konversi_suhu.py yang menerapkan pola tersebut:

python
def celsius_ke_fahrenheit(celsius):
    return celsius * 9 / 5 + 32

def fahrenheit_ke_celsius(fahrenheit):
    return (fahrenheit - 32) * 5 / 9

if __name__ == "__main__":
    for suhu in (0, 37, 100):
        print(f"{suhu} C = {celsius_ke_fahrenheit(suhu)} F")

Dijalankan langsung, kode di dalam blok if ikut berjalan dan menghasilkan tabel konversi:

bash
$ python3 konversi_suhu.py
0 C = 32.0 F
37 C = 98.6 F
100 C = 212.0 F

Sebagai module, blok itu dilewati sepenuhnya. Program cuaca.py tinggal memakai function-nya tanpa efek samping:

python
from konversi_suhu import celsius_ke_fahrenheit

suhu_f = round(celsius_ke_fahrenheit(36.6), 1)
print(f"Suhu tubuh Siti: {suhu_f} F")

Output yang Dihasilkan:

text
Suhu tubuh Siti: 97.9 F

Perhatikan output cuaca.py: tidak ada satu pun baris tabel konversi yang bocor — persis penyakit yang kita derita pada file statistik.py dulu, kini sembuh total.

Mengapa Pola Ini Penting #

Manfaat pola ini jauh melebihi sekadar merapikan output:

  • File menjadi importable sekaligus runnable. Program lain boleh mengimpor konversi_suhu tanpa mendapat efek samping, sementara kita tetap bisa menjalankan file itu langsung untuk mencoba isinya.
  • Kode uji tinggal di samping kode yang diuji. Blok if __name__ == "__main__": menjadi tempat wajar menaruh percobaan cepat atau contoh pemakaian, tanpa takut mengganggu pengguna module.
  • Titik masuk program jelas. Dalam proyek besar, pola ini menandai file mana yang memang dirancang untuk dijalankan — file lain cukup berperan sebagai module yang diimpor.

Varian yang juga lazim di proyek nyata: kode program dibungkus ke dalam sebuah function bernama main(), lalu blok guard hanya berisi satu pemanggilan main(). Dengan bentuk itu, seluruh logika program tetap bisa dipanggil dan diuji sebagai function biasa, sementara perilaku “jalankan hanya bila dieksekusi langsung” tetap terjaga. Nama main di sini murni kesepakatan komunitas — yang menentukan tingkah laku tetap perbandingan __name__ == "__main__", bukan nama function-nya.

Masalah arsitektur kita kini beres satu per satu: import ditemukan lewat sys.path, package terstruktur rapi, dan kode program tidak lagi bocor saat diimpor. Tersisa satu keterampilan praktis: bagaimana menjelajahi isi module yang belum kita kenali — topik Chapter Module Discovery.