Lewati ke konten utama

Tutorial Pemeriksaan Tipe di Python

Pelajari tentang pemeriksaan tipe, berbagai jenis sistem tipe dalam berbagai bahasa beserta duck typing, dan type hinting.
· 7 mnt Baca

Jelajahi bersama AI

Bantuan dari Interpreter bawaannya melakukan pemeriksaan tipe di Python. Karena Python adalah bahasa dinamis, bahasa ini tidak memaksa pengguna untuk menerapkan tipe objek, yang dapat menyebabkan bug, dan kesalahan akan sulit ditemukan. Untuk mengatasinya, Python dapat digunakan bersama berbagai alat lain dan menerapkan fitur pemeriksaan tipe statis bersamaan dengan Duck Typing miliknya.

Ada dua jenis sistem tipe yang diikuti oleh berbagai bahasa pemrograman, seperti yang ditunjukkan di bawah ini.

    1. Bahasa Bertipe Statis
    2. Bahasa Bertipe Dinamis

Bahasa Bertipe Statis

Pemeriksaan tipe variabel dilakukan saat waktu kompilasi. Selain itu, sistem tipe bahasa tersebut mewajibkan deklarasi eksplisit 'tipe data' variabel sebelum digunakan. Bahasa pemrograman yang bertipe statis antara lain: Scala, Java, C++, dan sebagainya.
Sebagai contoh, deklarasi String di Scala didefinisikan seperti di bawah ini:
var myCar:String = "Mercedes";
Kode di atas menunjukkan bahwa nama variabel 'myCar' secara eksplisit dideklarasikan sebagai tipe data 'String' dengan nilai 'Mercedes'.

Bahasa Bertipe Dinamis

Pemeriksaan tipe variabel dilakukan saat waktu jalan. Selain itu, sistem tipe bahasa tersebut tidak mewajibkan deklarasi eksplisit 'tipe data' variabel sebelum digunakan. Bahasa pemrograman yang bertipe dinamis antara lain: Python, Javascript, Ruby, dan sebagainya.
Sebagai contoh, String di Python didefinisikan seperti di bawah ini:
myCar = "Mercedes"
Kode di atas menunjukkan bahwa nama variabel 'myCar' tidak perlu dideklarasikan secara eksplisit.

'type()' dan 'isinstance()' di Python

Tipe variabel dapat diketahui menggunakan 'type()' bawaan Python. 'type()' dapat digunakan saat runtime untuk tujuan debugging guna mengidentifikasi tipe variabel yang tepat dalam program. Mari kita lihat tipe beberapa variabel pada contoh di bawah.

my_var = 12
print(type(my_var))

Kode di atas akan menghasilkan keluaran 'int'. Karena tipe data variabel tersebut adalah bilangan bulat di mana 'type()' berperan dalam mengidentifikasinya.

'insinstance('obj','class')' di Python dapat digunakan untuk mengetahui apakah 'obj', yaitu objek, merupakan instance dari kelas atau tidak. Nilai keluaran yang dikembalikan berupa boolean, bisa True atau False.

my_var = "Hello"
print(isinstance(my_var,str))

Kode di atas akan menghasilkan keluaran True. Karena tipe data variabel tersebut adalah string, di mana 'isinstance()' berperan dalam mengidentifikasinya.

Duck typing di Python

Ada prinsip populer di Python, "Jika terlihat seperti bebek, berenang seperti bebek, dan bersuara seperti bebek, maka kemungkinan besar itu adalah bebek." Sederhananya, prinsip ini mengatakan bahwa tipe objek atau kelas tidak penting, tetapi objek perlu memiliki metode dan properti yang serupa, maka objek tersebut dapat digunakan untuk tujuan tertentu.
Mari kita lihat contoh untuk memperjelas pernyataan di atas secara lebih rinci.

Perhatikan contoh di bawah ini, ada dua kelas 'Duck' dan 'Human'. Duck adalah kelas yang memiliki metode quack dan fly. Demikian pula, Human adalah kelas dengan kumpulan metodenya sendiri 'quack' dan 'fly'. Duck dan Human adalah kelas yang berbeda dan juga objek atau tipe yang berbeda. Namun, Human memiliki metode serupa yaitu 'fly' dan 'quack' seperti pada Duck. Ada juga metode 'fly_quack', yang paling mirip dengan 'Duck' daripada 'Human' karena dapat terbang dan bersuara.

class Duck:
    def quack(self):
        print('Quack')
    def fly(self):
        print('Flap')
class Human:
    def quack(self):
        print('Trying to Quack like a duck')
    def fly(self):
        print('Spreading my arm to flap like a duck')      
def fly_quack(thing):
    thing.quack()
    thing.fly()

Mari buat instance 'Duck' sebagai du dan oper ke fungsi 'fly_quack(du)'. Demikian pula, untuk instance Human dibuat 'h' dan dioper ke fungsi 'fly_quack(h)'.

du = Duck()
fly_quack(du)
h = Human()
fly_quack(h)

Keluaran dari kode di atas adalah sebagai berikut:

Trying to Quack like a duck
Spreading my arm to flap like a duck
Quack
Flap

Karena kelas 'Human' adalah kelas yang berbeda dari 'Duck', namun Python tetap memanggil fungsi 'fly_quack' untuk manusia juga. Meskipun tipe objeknya berbeda, karena 'Human' memiliki metode quack dan fly yang serupa, ia berperilaku dan menyediakan metode yang diperlukan.

Type Hint dan mypy

Ada aspek kuat dari Bahasa Bertipe Dinamis seperti Python, yang membantu kode menjadi mudah diakses dan dibaca, tetapi ada juga beberapa kelemahan. Salah satunya adalah menemukan kesalahan saat runtime karena Python tidak memaksakan tipe variabel, atau karena ia adalah bahasa bertipe dinamis. Akibatnya dapat menimbulkan kesalahan dan bug yang akan sulit ditemukan ketika panjang kode semakin besar.

Python telah menerapkan Type Hints sejak versi 3.5. Versi yang lebih lama mungkin tidak mendukung fungsionalitas TypeHints.

Anda akan melihat contoh sederhana tanpa type hinting dan mypy.

Fungsi di bawah ini untuk pengurangan nilai integer, yang mengurangkan dua bilangan bulat dan mengembalikan nilainya.

def sub_this(x,y):
    return 'Subtraction'
print(sub_this(8,'hello'))

Di sini fungsi di atas seharusnya menerima dua bilangan bulat 'x' dan 'y', tetapi karena aturan tidak diberlakukan, ia dapat menerima tipe data apa pun. Selain itu, nilai kembalian bisa apa saja, di mana nilai 'str' ('Subtraction') dikembalikan, padahal yang diharapkan adalah 'int'.

Mari lihat implementasi serupa dari program di atas, tetapi dengan menggunakan type hints dan 'mypy', yang dapat membantu menerapkan pemeriksaan tipe statis dan mengurangi kesalahan serta bug dalam program dengan cukup mudah.

'mypy' adalah modul python yang membantu dalam pemeriksaan tipe statis, yang menggunakan pemeriksaan dinamis Python atau duck typing dengan type-hinting.

Anda perlu memasang paket 'mypy'
pip install mypy

Anda dapat membuat file bernama 'mypy_example.py' di mesin lokal Anda dan ketik kode berikut.
Kode di bawah ini adalah program sederhana yang menerima dua bilangan bulat sebagai masukan pada parameter dan setelah '->' menunjukkan tipe data yang dikembalikan, yang juga 'int'. Namun, fungsinya seharusnya mengembalikan int, tetapi string 'Subtracted two integers' yang dikembalikan.

def sub_this(x:int,y:int) -> int:
    return 'Subtracted two integers'
print(sub_this(8,4))

Jalankan kode di atas di terminal dengan perintah berikut.

mypy mypy_example.py

Kemudian akan ditampilkan kesalahan yang menunjukkan bahwa nilai kembalian tak terduga "str" ditemukan dan perlu diubah menjadi "int".

Pesan kesalahan

Mari ubah nilai kembalian menjadi hasil pengurangan dua bilangan bulat sehingga nilai integer yang dikembalikan.

def sub_this(x:int,y:int) -> int:
    return x - y
print(sub_this(8,4))

Pesan sukses

Hasil di atas menunjukkan bahwa pesan sukses dicetak, dan tidak ditemukan masalah.

Selamat

Selamat, Anda telah mencapai akhir tutorial ini!

Dalam tutorial ini, Anda telah mempelajari tentang pemeriksaan tipe, berbagai jenis sistem tipe dalam berbagai bahasa dengan metode Python ('type()', dan 'isinstance()') beserta duck typing di Python dan type hinting yang dikombinasikan dengan 'mypy'.

Jika Anda ingin mempelajari lebih lanjut tentang Python, ikuti Software Engineering for Data Scientists in Python dari DataCamp.

Referensi:

  1. Video YouTube Corey tentang Duck Typing

Topik

Terkait

blogs

40 Pertanyaan Wawancara DBMS Teratas di 2026

blogs

Tutorial Korelasi di R

blogs

Spaghetti Plot dan Jalur Badai