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.
Bahasa Bertipe Statis
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.
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))Didukung oleh
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.
classDuck:defquack(self):print('Quack')deffly(self):print('Flap')classHuman:defquack(self):print('Trying to Quack like a duck')deffly(self):print('Spreading my arm to flap like a duck')deffly_quack(thing):
thing.quack()
thing.fly()Didukung oleh
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)Didukung oleh
Keluaran dari kode di atas adalah sebagai berikut:
Trying to Quack like a duck
Spreading my arm to flap like a duck
Quack
Flap
Didukung oleh
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.
defsub_this(x,y):return'Subtraction'print(sub_this(8,'hello'))Didukung oleh
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.
defsub_this(x:int,y:int)->int:return'Subtracted two integers'print(sub_this(8,4))Didukung oleh
Jalankan kode di atas di terminal dengan perintah berikut.
Kemudian akan ditampilkan kesalahan yang menunjukkan bahwa nilai kembalian tak terduga "str" ditemukan dan perlu diubah menjadi "int".
Mari ubah nilai kembalian menjadi hasil pengurangan dua bilangan bulat sehingga nilai integer yang dikembalikan.
defsub_this(x:int,y:int)->int:return x - y
print(sub_this(8,4))Didukung oleh
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'.
Kuasai pertanyaan wawancara basis data, dari konsep SQL dasar hingga skenario desain sistem tingkat lanjut. Panduan mendalam ini mencakup semua yang Anda perlukan untuk sukses di wawancara DBMS dan meraih peran berikutnya.
Temukan alasan mengapa Anda sebaiknya (tidak) menggunakan spaghetti plot untuk menyampaikan ketidakpastian jalur prediksi badai serta dampaknya terhadap interpretasi.
Selami ilmu data dengan Python dan pelajari cara menganalisis serta memvisualisasikan data Anda secara efektif. Tak perlu pengalaman atau keterampilan coding.
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.
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.
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.
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.
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)'.
Keluaran dari kode di atas adalah sebagai berikut:
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.
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 mypyAnda 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.
Jalankan kode di atas di terminal dengan perintah berikut.
Kemudian akan ditampilkan kesalahan yang menunjukkan bahwa nilai kembalian tak terduga "str" ditemukan dan perlu diubah menjadi "int".
Mari ubah nilai kembalian menjadi hasil pengurangan dua bilangan bulat sehingga nilai integer yang dikembalikan.
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: