Cara Memeriksa Tipe Data dengan Python (tipe vs isinstance)

Pelajari cara memeriksa tipe data dengan Python. Pahami kapan harus menggunakan type() vs isinstance(), menangani kelas khusus, dan menulis validasi pemeriksaan tipe yang aman.

Coba Solusi ini di Editor

Ikhtisar

Python adalah bahasa yang diketik secara dinamis, artinya variabel dapat menampung nilai tipe data apa pun dan tipenya dapat berubah selama eksekusi. Meskipun fleksibilitas ini mempercepat pengembangan awal, fleksibilitas ini juga mengharuskan Anda memverifikasi tipe variabel saat runtime sebelum menjalankan operasi tipe tertentu, seperti melakukan aritmatika pada bilangan bulat atau memanggil metode string.

Untuk memeriksa tipe data suatu objek, Python menyediakan dua fungsi utama: `type()` dan `isinstance()`. Fungsi `type(obj)` mengembalikan tipe kelas objek yang tepat. Meskipun Anda dapat menggunakan `type(obj) == int` untuk memverifikasi apakah suatu bilangan adalah bilangan bulat, metode ini umumnya tidak disarankan karena tidak mendukung struktur pewarisan (subkelas bilangan bulat akan bernilai `False`).

Cara pythonic yang direkomendasikan untuk memeriksa tipe adalah `isinstance(obj, class_info)`. Fungsi ini memeriksa apakah suatu objek merupakan turunan dari kelas tertentu atau subkelas apa pun yang diwarisi darinya. Ini juga mendukung pemeriksaan terhadap tuple kelas (misalnya, `isinstance(value, (int, float))`), membuat kode validasi menjadi sangat fleksibel dan kuat.

Kode & Output Eksekusi

Skrip ini mendemonstrasikan pemeriksaan tipe variabel menggunakan type() dan isinstance(), yang menunjukkan perbedaan dalam pewarisan.

check_type.py
Coba di Editor
value_int = 42
value_str = "hello"

# 1. Checking type using isinstance() (Recommended)
is_number = isinstance(value_int, int)
print(f"Is {value_int} an int? {is_number}")

# Checking against multiple possible types
is_num_or_str = isinstance(value_str, (int, float, str))
print(f"Is '{value_str}' int, float, or str? {is_num_or_str}")

# 2. Checking type using type() (For exact class matches)
print(f"Exact type of value_int: {type(value_int).__name__}")
print("Is value_int exactly an int?", type(value_int) is int)

# 3. Inheritance difference
class CustomList(list):
    pass

my_list = CustomList([1, 2, 3])

print("\nInheritance testing:")
print("isinstance(my_list, list):", isinstance(my_list, list))
print("type(my_list) is list:", type(my_list) is list)
Keluaran Terminal
Is 42 an int? True
Is 'hello' int, float, or str? True
Exact type of value_int: int
Is value_int exactly an int? True

Inheritance testing:
isinstance(my_list, list): True
type(my_list) is list: False

Implementasi Langkah demi Langkah

  • Gunakan isinstance(variable, type_name) untuk pemeriksaan tipe umum (sesuai dengan warisan).
  • Berikan tupel tipe seperti isinstance(variable, (int, float)) untuk memeriksa beberapa kelas.
  • Gunakan type(variable) is type_name hanya ketika Anda harus menjamin kecocokan kelas yang tepat, mengabaikan subkelas.

Pertanyaan yang Sering Diajukan

Mengapa isinstance() lebih disukai daripada type()?

isinstance() mendukung pewarisan objek dan polimorfisme. Jika Anda membuat subkelas dari tipe bawaan, isinstance() akan mengenalinya dengan benar sebagai turunan dari kelas induk, sedangkan type() akan bernilai False.

Bagaimana saya bisa memeriksa apakah suatu objek dapat dipanggil (seperti suatu fungsi)?

Gunakan fungsi callable() bawaan, yang mengembalikan True jika objek dapat dipanggil seperti fungsi.

Topik Terkait

Sumber Daya Python yang Direkomendasikan

Perluas pengetahuan Anda dengan tutorial interaktif terkait, lembar contekan, dan perbandingan kode.