Traffine I/O

Bahasa Indonesia

2022-04-01

Tipe Literal dalam Python

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:

python
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.

python
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
    Dengan typing.Literal, Anda menentukan nilai yang tepat yang dapat diambil oleh variabel. Dengan enum.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. Dengan typing.Literal, Anda melihat nilai-nilai spesifik yang dapat diambil, yang juga bisa informatif, tetapi Anda tidak mendapatkan label semantik.

Referensi

https://peps.python.org/pep-0586/

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!