Traffine I/O

Bahasa Indonesia

2022-04-02

TypedDict dalam Python

Apa itu TypedDict

TypedDict adalah fitur yang diperkenalkan dalam Python 3.8, sebagai bagian dari modul typing. Fitur ini memungkinkan Anda untuk menentukan petunjuk tipe untuk kamus, di mana Anda dapat menandai kunci yang diharapkan dan tipe nilai yang sesuai. TypedDict tidak mengenakan tipe-tipe ini saat runtime; sebaliknya, fitur ini digunakan untuk alat pengecekan tipe statis, meningkatkan keterbacaan dan keberlanjutan kode Anda.

Membuat TypedDict

Membuat TypedDict di Python sangatlah mudah. Pertama, Anda perlu mengimpor kelas TypedDict dari modul typing. Kemudian, Anda mendefinisikan TypedDict Anda sebagai kelas baru yang mewarisi dari TypedDict. Di dalam kelas ini, Anda mendefinisikan kunci-kunci dan tipe yang terkait.

Mari buat sebuah TypedDict sederhana untuk profil pengguna:

python
from typing import TypedDict

class UserProfile(TypedDict):
    name: str
    age: int
    email: str

Dalam contoh di atas, kita telah membuat TypedDict dengan nama UserProfile. Menurut definisinya, sebuah kamus dengan tipe UserProfile harus memiliki kunci-kunci name, age, dan email, dengan tipe masing-masingnya adalah str, int, dan str.

Sekarang setelah kita mendefinisikan TypedDict UserProfile kita, mari kita lihat bagaimana menggunakannya:

python
def display_user(profile: UserProfile) -> None:
    print(f"Name: {profile['name']}")
    print(f"Age: {profile['age']}")
    print(f"Email: {profile['email']}")

user: UserProfile = {
    'name': 'Alice',
    'age': 30,
    'email': 'alice@example.com'
}

display_user(user)

Pada kode di atas, kita pertama-tama mendefinisikan fungsi display_user yang mengambil sebuah kamus UserProfile sebagai argumen dan mencetak informasi pengguna. Kemudian, kita membuat sebuah kamus pengguna sesuai dengan TypedDict UserProfile yang kita definisikan sebelumnya, dan memanggil display_user dengan user sebagai argumen.

Petunjuk tipe pada tanda tangan fungsi membantu memastikan bahwa fungsi display_user selalu menerima tipe kamus yang benar. Jika kita mencoba memanggil display_user dengan kamus yang tidak sesuai dengan TypedDict UserProfile (misalnya jika terdapat kunci yang hilang atau kunci memiliki nilai dengan tipe yang salah), kita akan mendapatkan galat tipe.

Kunci Opsional dalam TypedDict

Sementara TypedDict yang kita buat pada bagian sebelumnya memerlukan semua kunci untuk hadir dan memiliki tipe tertentu, adalah juga mungkin untuk mendefinisikan TypedDict dengan kunci opsional. Hal ini dapat dilakukan dengan menggunakan parameter total dalam definisi TypedDict.

Misalkan dalam profil pengguna, alamat surel bersifat opsional. Hal ini dapat kita representasikan dengan mengatur total=False dalam definisi UserProfile kita:

python
from typing import TypedDict

class UserProfile(TypedDict, total=False):
    name: str
    age: int
    email: str

Sekarang, sebuah UserProfile dapat memiliki kunci email atau tidak, dan tetap valid:

python
def display_user(profile: UserProfile) -> None:
    print(f"Name: {profile['name']}")
    print(f"Age: {profile['age']}")
    if 'email' in profile:
        print(f"Email: {profile['email']}")

user: UserProfile = {
    'name': 'Alice',
    'age': 30
}

display_user(user)

Pada contoh kode di atas, kita telah memodifikasi fungsi display_user untuk hanya mencetak alamat surel jika ada dalam profil. Kemudian, kita membuat kamus user tanpa alamat surel, dan display_user(user) berjalan tanpa adanya galat.

TypedDict Bersarang

TypedDict juga dapat bersarang untuk mewakili struktur data yang lebih kompleks. Misalkan terdapat skenario di mana profil pengguna mencakup alamat, yang pada dirinya sendiri merupakan kamus dengan beberapa bidang:

python
from typing import TypedDict

class Address(TypedDict):
    street: str
    city: str
    state: str
    zip_code: str

class UserProfile(TypedDict):
    name: str
    age: int
    email: str
    address: Address

Pada contoh kode di atas, kita telah mendefinisikan TypedDict Address, dan kemudian menggunakannya dalam definisi UserProfile. Sekarang, sebuah UserProfile mencakup kunci address, yang nilainya harus berupa kamus Address.

TypedDict dan Pewarisan

TypedDict juga mendukung pewarisan. Hal ini berguna ketika Anda memiliki beberapa jenis kamus yang memiliki beberapa bidang yang sama namun juga memiliki bidang unik mereka sendiri.

Misalkan terdapat skenario di mana, selain profil pengguna, kita juga memiliki profil admin. Admin memiliki semua bidang yang sama dengan pengguna, tetapi juga memiliki bidang tambahan permissions:

python
class AdminProfile(UserProfile):
    permissions: list[str]

Pada contoh kode di atas, kita mendefinisikan AdminProfile sebagai subkelas dari UserProfile, dan menambahkan bidang permissions tambahan. Sekarang, sebuah AdminProfile diharapkan memiliki semua bidang dari UserProfile, ditambah bidang permissions.

Referensi

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

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!