Python'da Veri Türü Nasıl Kontrol Edilir (tip vs isinstance)

Python'da veri türlerini nasıl kontrol edeceğinizi öğrenin. type() ile isinstance()'ın ne zaman kullanılacağını anlayın, özel sınıfları yönetin ve güvenli tür kontrolü doğrulamaları yazın.

Bu Çözümü Editör'de deneyin

Genel Bakış

Python dinamik olarak yazılan bir dildir; bu, değişkenlerin herhangi bir veri türünden değerleri tutabileceği ve yürütme sırasında türlerinin değişebileceği anlamına gelir. Bu esneklik ilk geliştirmeyi hızlandırırken aynı zamanda tamsayılar üzerinde aritmetik işlem yapmak veya dize yöntemlerini çağırmak gibi türe özgü işlemleri çalıştırmadan önce çalışma zamanında değişken türlerini doğrulamanızı da gerektirir.

Bir nesnenin veri türünü kontrol etmek için Python iki temel işlev sağlar: "type()" ve "isinstance()". 'type(obj)' işlevi, nesnenin kesin sınıf türünü döndürür. Bir sayının tam sayı olup olmadığını doğrulamak için "type(obj) == int" komutunu kullanabilirsiniz, ancak bu yöntem kalıtım yapılarını desteklemediğinden genellikle önerilmez (bir tam sayının alt sınıfı "False" olarak değerlendirilir).

Türleri kontrol etmenin önerilen Pythonic yolu "isinstance(obj, class_info)"dur. Bu işlev, bir nesnenin belirtilen sınıfın bir örneği mi yoksa ondan miras alınan herhangi bir alt sınıf mı olduğunu kontrol eder. Ayrıca, doğrulama kodunu son derece esnek ve sağlam hale getiren bir grup sınıfa (örneğin, `isinstance(value, (int, float))`) karşı kontrolü de destekler.

Kod ve Yürütme Çıkışı

Bu komut dosyası, hem type() hem de isinstance() kullanarak değişken türlerinin kontrol edilmesini gösterir ve kalıtımdaki farklılıkları gösterir.

check_type.py
Editör'de deneyin
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)
Terminal Çıkışı
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

Adım Adım Uygulama

  • Genel tür kontrolü (kalıtıma uygun) için isinstance(variable, type_name) öğesini kullanın.
  • Birden fazla sınıfı kontrol etmek için isinstance(variable, (int, float)) gibi bir dizi türü iletin.
  • Type(değişken) türünü yalnızca alt sınıfları göz ardı ederek tam sınıf eşleşmesini garanti etmeniz gerektiğinde type_name kullanın.

Sıkça Sorulan Sorular

Neden isinstance(), type() yerine tercih ediliyor?

isinstance() nesne mirasını ve polimorfizmi destekler. Yerleşik bir türü alt sınıflandırırsanız, isinstance() onu ana sınıfın bir örneği olarak doğru bir şekilde tanıyacaktır; type() ise False olarak değerlendirilecektir.

Bir nesnenin çağrılabilir olup olmadığını (bir işlev gibi) nasıl kontrol edebilirim?

Nesne bir işlev gibi çağrılabiliyorsa True değerini döndüren yerleşik callable() işlevini kullanın.

İlgili Konular

Önerilen Python Kaynakları

İlgili etkileşimli eğitimler, yardımcı sayfalar ve kod karşılaştırmalarıyla bilginizi genişletin.