Tipe Literal dalam Python
Diperkenalkan dalam Python 3.8, typing.Literal
digunakan untuk menentukan tipe yang dibatasi pada satu atau lebih nilai spesifik. Misalnya, Literal[1, 2, 3]
menunjukkan tipe yang bisa berupa 1
, 2
, atau 3
. Ini dapat digunakan bersamaan dengan petunjuk tipe lainnya untuk membuat penjelasan tipe yang lebih akurat.
typing.Literal
tidak memeriksa batasan ini saat runtime, tetapi batasan tersebut diperiksa oleh alat pemeriksa tipe, linter, dan fitur IDE. Hal ini dapat membantu menemukan bug sebelum menjalankan kode, dan membuat kode Anda lebih mudah dipahami.
Sintaksis typing.Literal
Sintaks dasarnya adalah Literal[val1, val2, ...]
di mana val1, val2, ...
adalah nilai konkret. Berikut adalah contoh penggunaan dasar:
from typing import Literal
def get_status(status: Literal["connected", "disconnected", "idle"]) -> None:
pass
Dalam contoh ini, fungsi get_status
diharapkan menerima salah satu dari tiga string status. Apapun selain itu akan dianggap salah oleh pemeriksa tipe, meskipun Python sendiri tidak akan menegakkannya saat runtime.
Tipe literal sebagian besar digunakan ketika suatu fungsi hanya menerima kumpulan nilai tertentu. Misalnya, fungsi yang menangani metode HTTP mungkin hanya menerima metode "GET", "POST", "PUT", "DELETE", dan sebagainya. Tipe literal dapat membuat hal ini eksplisit.
from typing import Literal, Optional, Dict, Any
def handle_request(method: Literal["GET", "POST", "PUT", "DELETE"], url: str, data: Optional[Dict[str, Any]] = None) -> None:
pass
Dalam contoh ini, fungsi handle_request
diharapkan menerima salah satu dari empat metode HTTP sebagai string. Nilai lainnya akan ditandai oleh pemeriksa tipe. Ini membantu membuat kode lebih mudah dipahami, dan dapat membantu menangkap bug sebelum menjalankan kode.
Membandingkan Tipe Literal dan Enumerasi
typing.Literal
dan Enum memiliki tujuan yang serupa: keduanya membatasi nilai menjadi kumpulan opsi yang terbatas. Tetapi ada beberapa perbedaan:
-
Informasi Tipe
Dengantyping.Literal
, Anda menentukan nilai yang tepat yang dapat diambil oleh variabel. Denganenum.Enum
, Anda membuat nilai yang berbeda-beda, dan tipe variabelnya adalah enumerasi itu sendiri, bukan nilai dari item enumerasi. -
Pemeriksaan Saat Runtime
Enumerasi Python diperiksa saat runtime. Jika Anda mencoba menetapkan nilai yang tidak valid ke enumerasi, Anda akan mendapatkan kesalahan saat runtime.typing.Literal
, di sisi lain, tidak memberikan jaminan saat runtime. Batasan-batasannya hanya diperiksa oleh alat pemeriksa tipe, linter, dan fitur IDE. -
Ketegasan Kode
Enum dapat membuat kode Anda lebih mudah dipahami. Dengantyping.Literal
, Anda melihat nilai-nilai spesifik yang dapat diambil, yang juga bisa informatif, tetapi Anda tidak mendapatkan label semantik.
Referensi