51 poin oleh GN⁺ 2025-04-24 | 5 komentar | Bagikan ke WhatsApp
  • Memperkenalkan 14 fitur tingkat lanjut Python yang jarang diketahui beserta contoh nyata
  • Memberikan penjelasan mendalam tentang static typing dan desain struktural seperti typing, generics, protocols, dan context managers
  • Juga mencakup structural pattern matching yang baru diperkenalkan mulai Python 3.10+, serta teknik optimasi performa seperti slots dan metaclass
  • Memuat tips untuk menulis kode yang rapi seperti f-string, cache, future, proxy, for-else, dan walrus
  • Untuk tiap fitur, tersedia tautan dan referensi untuk pembelajaran lanjutan, dengan susunan yang tetap mudah diikuti oleh developer junior

Ringkasan 14 Fitur Python Tingkat Lanjut

# Overload Typing

  • Dekorator @overload memungkinkan mendefinisikan beberapa type signature untuk satu fungsi
  • Type checker dapat menyimpulkan return type secara akurat sesuai nilai argumen yang diberikan
  • Dengan memanfaatkan Literal, kita juga bisa membatasi nilai string
  • Juga dapat mengimplementasikan signature fungsi yang mewajibkan hanya salah satu dari id atau username
  • Literal dapat dipakai sebagai pengganti Enum yang ringan untuk menjaga type safety

# Argumen keyword-only / positional-only

  • Dengan *, argumen dapat diatur sebagai keyword-only (argumen posisi tidak diperbolehkan)
  • Dengan /, argumen dapat diatur sebagai positional-only (argumen keyword tidak diperbolehkan)
  • Saat merancang API, ini memungkinkan kita memaksa cara penggunaan argumen dengan jelas

# Future annotations (__future__)

  • Type hint pada dasarnya langsung dievaluasi saat runtime, sehingga bisa menimbulkan masalah urutan deklarasi
  • Dengan from __future__ import annotations, kita bisa menunda waktu evaluasi
  • Namun karena pendekatan ini memakai pemrosesan string, perlu hati-hati saat menggunakan tipe di runtime
  • PEP 649 mengusulkan perbaikan dengan evaluasi tertunda melalui atribut __annotations__

# Sintaks Generic

  • Mulai Python 3.12, tersedia sintaks baru untuk mendefinisikan generic type
  • Alih-alih TypeVar, kini bisa ditulis lebih intuitif dalam bentuk class Foo[T, U: int]
  • Variadic Generics juga diperkenalkan untuk menangani beragam tipe
  • Definisi type alias juga menjadi lebih ringkas, misalnya type Vector = list[float]

# Protocols

  • Merupakan versi type checking dari Duck Typing yang memungkinkan structural subtyping
  • Jika sebuah kelas memiliki metode tertentu, ia bisa kompatibel secara tipe meski tanpa mewarisi tipe tersebut
  • Dengan @runtime_checkable, ini juga dapat diperluas agar mendukung pemeriksaan isinstance

# Context Manager

  • Objek dengan metode __enter__ dan __exit__ yang digunakan di dalam blok with
  • Dengan dekorator contextlib.contextmanager, kita bisa membuat implementasi sederhana berbasis fungsi
  • Sebelum dan sesudah yield, kita dapat menjalankan proses setup dan cleanup

# Structural Pattern Matching

  • Sintaks match-case memungkinkan percabangan intuitif untuk struktur data yang kompleks
  • Mendukung destructuring tuple/list, pola OR, guard condition (if), dan wildcard
  • Karena percabangan didasarkan pada struktur data, keterbacaan dan kemudahan pemeliharaan meningkat

# Optimasi __slots__

  • Mengoptimalkan memori dan kecepatan dengan memakai slot tetap alih-alih __dict__
  • __slots__ menggunakan tuple yang hanya berisi nama atribut
  • Mencegah penambahan atribut yang tidak perlu ke dalam kelas
  • Namun karena ini cenderung optimasi tingkat mikro, penggunaannya perlu dipertimbangkan dengan hati-hati

# Kumpulan tips gaya kode Python

  • for-else statement: else dijalankan bila loop selesai tanpa break
  • Walrus operator (:=): memungkinkan deklarasi variabel dan pengecekan sekaligus
  • Short-circuit or: mengembalikan nilai pertama yang bernilai true di antara beberapa nilai
  • Chaining comparison operator: kode bisa dibuat lebih ringkas seperti 0 < x < 10

# Pemformatan lanjutan f-string

  • Dengan sintaks f"{variabel=}", kita bisa membuat representasi untuk debugging
  • Tersedia beragam opsi seperti format angka (:.2f, :+.2f, :,) dan format tanggal (%Y-%m-%d)
  • Juga bisa memanfaatkan mini language format untuk perataan tengah, padding, persentase, dan lainnya

# Dekorator cache

  • @lru_cache dan @cache dapat menyimpan hasil fungsi untuk meningkatkan kecepatan
  • Sangat berguna untuk fungsi rekursif atau perhitungan yang sering diulang
  • @cache diperkenalkan mulai Python 3.9 dan menyediakan cache tak terbatas secara bawaan

# Python Future

  • Fitur pemrosesan objek asinkron yang mirip dengan Promise di JS
  • Hasil asinkron dapat dikelola lewat Future.set_result() dan add_done_callback()
  • asyncio.Future() dapat digunakan bersama await
  • Jika dipakai dengan ThreadPoolExecutor, ini juga memungkinkan pemrosesan paralel di background

# Proxy Property

  • Membuat satu atribut kelas dapat bekerja baik sebagai properti maupun sebagai fungsi
  • Menyediakan dua fungsi tersebut melalui __get__, __call__, dan __repr__
  • Dalam desain API, ini memungkinkan menangani nilai default dan pemanggilan berparameter dengan satu cara
  • Lebih layak dijadikan referensi sebagai contoh eksperimental daripada penggunaan praktis

# Metaclass

  • Kelas dari sebuah kelas yang bertugas membuat kelas itu sendiri
  • Memungkinkan logika meta seperti memanipulasi atribut kelas atau registrasi otomatis
  • Dalam praktiknya, kebanyakan kasus bisa digantikan dengan dekorator
  • Framework seperti Django, SQLAlchemy, dan Pydantic menggunakan metaclass secara internal

5 komentar

 
hackerpropoker 2025-04-29

Dari sudut pandang backend, saya pernah mengalami bahwa metaclass membuat proses debugging menjadi lebih sulit.

 
ilotoki0804 2025-04-28

Perlu dicatat bahwa for-else sering dianggap sebagai anti-pattern karena ada pendapat bahwa fitur ini kurang mudah dibaca atau kurang jelas, dan asyncio.Future diperlakukan sebagai detail implementasi internal dari asyncio.

 
dkmin 2025-04-26

Terima kasih. Khususnya poin 10 akan langsung saya terapkan.

Menambahkan aturan coding AI..

 
yangeok 2025-04-25

Terima kasih atas tips bermanfaatnya

 
GN⁺ 2025-04-24
Opini Hacker News
  • Halo! Saya penulis asli blog ini! Saya terkejut melihat tulisan saya naik ke halaman depan HN pada pukul 4 pagi

    • Tulisan ini bermula dari 14 tweet pendek yang saya buat sebulan sebelum memulai blog
    • Saat memulai blog, saya memutuskan untuk menggunakan kembali tweet-tweet itu sebagai postingan pertama
    • Jadi alurnya mungkin terasa agak janggal
    • Pada hari Senin saya mencoba mencari hal yang berguna, dan pada hari Jumat sesuatu yang sedikit lebih unik
    • Judulnya juga demikian, ini adalah kumpulan 14 fitur yang menurut saya menarik saat menggunakan Python
    • Saya hanya menghabiskan sekitar 5 detik untuk memikirkan judulnya
  • Setiap kali menggunakan Python, saya khawatir apakah kode saya terlihat seperti salah menggunakan Python

    • Saya terkejut dengan hal-hal mendalam atau perubahan pada Python yang sebelumnya tidak saya ketahui
    • Go memberi keyakinan bahwa kode tidak akan terasa ketinggalan zaman beberapa tahun kemudian
    • Artikelnya bagus sekali
  • Python harus tetap menjadi Python, dan golang, Rust, Typescript masing-masing harus punya filosofi dan desainnya sendiri

    • Saya sudah menulis kode dalam 4 bahasa selama 28 tahun, dan saya tidak menyukai perubahan pada Python
    • Alasan Python menjadi populer bukan karena lapisan tambahan seperti type checking atau anotasi
    • Saya pernah melihat hal serupa di bahasa lain juga
    • Ini adalah daftar yang komprehensif dari fitur-fitur yang diperkenalkan belakangan ini
    • Ada daftar sebelumnya yang mungkin juga berguna bagi para pembaca
  • Kelebihan terbesar Python adalah rasanya seperti pseudocode yang bisa dijalankan

    • Bahasanya tidak mengganggu instruksi pada level domain
    • Semakin banyak fitur ditambahkan, semakin berkurang daya tariknya
    • Kebanyakan orang tidak benar-benar memahami Python secara mendalam
  • Catatan tentang evaluasi paragraf 9.3: jika ada string kosong, evaluasinya akan berbeda

    • Klausa if-else memperlakukan string kosong sebagai nilai yang valid, tetapi operator or memperlakukannya setara dengan None
  • Sebagai seseorang yang beralih dari Javascript/Typescript ke Python, ini adalah sumber yang berguna

    • typing overload adalah untuk fitur Javascript yang kurang baik, dan saya menganggapnya sebagai utang teknis
    • Argumen keyword-only dan positional-only sintaksnya terlalu ringkas sehingga saya khawatir soal keterbacaan
    • future annotations baru-baru ini sangat membantu
    • Protocol mirip dengan Typescript, tetapi terasa tidak khas Python
    • Metaclass adalah alat yang kuat untuk menyelesaikan masalah yang unik
  • Sebagian besar fiturnya bukan fitur lanjutan

    • Saya cenderung menghindari metaclass karena bisa memicu perilaku yang kompleks
    • 'proxy property' bukanlah sebuah fitur
  • Hal yang ingin saya ubah dari daftar ini adalah dimasukkannya container collections.abc

    • Banyak komentar tidak menyukai walrus operator, tetapi setelah menemukan penggunaan yang bagus, saya memakainya dengan berguna
    • Saat memakai pola regular expression, kodenya menjadi jauh lebih rapi
  • Saya menikmati membaca tulisan ini

    • Sebagian besar fitur adalah fitur dari modul typing
    • Saya belum yakin soal generic atau protocol
    • Saya penasaran apakah kode Python modern tingkat produksi menggunakan type di mana-mana