Python3 ile Değişken ve Diğer Nesnelerde Tür Kontrolü

Elimizdeki bir değişkenin sayı/yazı olma durumunu kontrol etmek istediğimizde uygulayabileceğimiz 3 alternatif var, en azından şu ana kadar karşılaştığım ve aklıma direk gelen 3 alternatif şekil var. Bunları birer örnek üzerinde görmeden önce, kullanımıyla ilgili yakın tarihten bir örnek vereyim, mesaj sunucusu şifre yanlışsa istemciye 100 gibi bir sayı yolluyor, doğruysa kullanıcının bilgilerini yolluyor. Bu durumda gelen verinin türü(json decode edildikten sonra) integer ise giriş yapılamıyor, liste ise giriş yapılmış oluyor(biraz basit kaçtı bu şekilde ama şimdilik böyle kalsın, detay için sunucu-istemci kodlarına bakabilirsiniz, blogda mevcut). İşte bu kontrolleri yaparken şöyle bir şey deneyerek başlayalım:

>>> type(1)==str
False
>>> type(1)==bool
False
>>> type(True)==bool
True
>>> type(1)==int
True
>>> type([1,2,3])==int
False
>>> type([1,2,3])==list
True
>>> type((1,2,3))==tuple
True
>>> import threading
>>> type(threading.Thread)==class
SyntaxError: invalid syntax
>>> type(threading.Thread)==object
False
>>> type(threading.Thread)
<class 'type'>
>>> type(threading.Thread)==type
True

Sondaki object in hata vermesine dikkat edin, Thread isimli bir tür tanımlandığı için o hatayı aldık. Yani normal bir sınıf dışında bir yapı kabul edilmiş. Şöyle bir şey de deneyebiliriz:

>>> isinstance(1,int)
True
>>> isinstance([1,2,3],int)
False
>>> isinstance(1,tuple)
False
>>> isinstance(1,list)
False
>>> isinstance([1,3,4],list)
True
>>> isinstance("güray yıldırım",str)
True

isinstance() fonksiyonu gördüğümüz üzere ilk parametreye incelenecek nesneyi, 2. parametreye aynı mı diye kontrol edeceğimiz türü alıyor. Şöyle bir şey de deneyebiliriz:

>>> giriş = input("Bir şey giriniz: ") # string alıyoruz.
Bir şey giriniz: güray yıldırım
>>> giriş
'güray yıldırım'
>>> type(giriş) == type(1)
False
>>> type(giriş) == type("a")
True

Burada “a” ifadesi özel bir ifade değil. Herhangi bir string in türünü alıp kontrol etmiş olduk. Bunun başka yolları da mevcut, ancak şu anlık aklıma gelenler bunlar.

 

 
comments powered by Disqus