Python'da tip kontrolü yapmanın kanonik yolu nedir?

Belirli bir nesnenin belirli bir türde olup olmadığını kontrol etmenin en iyi yolu nedir? Nesnenin belirli bir türden miras alıp almadığını kontrol etmeye ne dersiniz?

Diyelim ki bir o nesnem var. Bunun bir str olup olmadığını nasıl kontrol edebilirim?

Çözüm

onunstrnin bir örneği veyastr`nin herhangi bir alt sınıfı olup olmadığını kontrol etmek için isinstance kullanın (bu "canonical" yol olacaktır):

if isinstance(o, str):

otürünün tam olarakstr` olup olmadığını kontrol etmek için (alt sınıfları hariç tutun):

if type(o) is str:

Aşağıdaki yöntem de işe yarar ve bazı durumlarda faydalı olabilir:

if issubclass(type(o), str):

İlgili bilgi için Python Kütüphane Başvurusu'ndaki Yerleşik İşlevler bölümüne bakın.

Bir not daha: bu durumda, eğer python 2 kullanıyorsanız, aslında kullanmak isteyebilirsiniz:

if isinstance(o, basestring):

çünkü bu Unicode dizeleri de yakalayacaktır (unicode, strnin bir alt sınıfı değildir; hem str hem de unicode, basestring'in alt sınıflarıdır). Python 3'te basestring artık mevcut değildir, burada stringler (str) ve ikili veriler (bytes) arasında sıkı bir ayrım vardır.

Alternatif olarak, isinstance bir sınıf çiftini kabul eder. Bu, x (str, unicode) sınıflarından herhangi birinin alt sınıfının bir örneği ise True döndürür:

if isinstance(o, (str, unicode)):
Yorumlar (6)

isinstance(o, str),obirstrise veyastrtüründen miras alan bir türdeyseTrue` değerini döndürür.

type(o) is str, sadece ve sadece o bir str ise True döndürür. Eğer o türü str türünden miras alınmış bir tür ise False döndürür.

Yorumlar (3)