Python’da, type() ve isinstance() yerleşik işlevleri, değişken gibi bir nesnenin türünü almak ve kontrol etmek ve belirli bir türden olup olmadığını belirlemek için kullanılır.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
Aşağıdaki içerikler, örnek kodla birlikte burada açıklanmıştır.
- Nesne türünü edinin ve kontrol edin:
type()
- Nesne tipinin belirlenmesi:
type()
,isinstance()
- type() kullanarak tip belirleme
- isinstance() kullanarak tür belirleme
- type() ve isinstance() arasındaki fark
Bir nesnenin türünü belirlemek yerine, bir nesnenin doğru yöntemlere ve niteliklere sahip olup olmadığını belirlemek için istisna işleme veya yerleşik hasattr() işlevi kullanılabilir.
Nesne türünü edinin ve kontrol edin:tip()
type(object), argüman olarak iletilen nesnenin türünü döndüren bir işlevdir. Bu, bir nesnenin türünü bulmak için kullanılabilir.
print(type('string'))
# <class 'str'>
print(type(100))
# <class 'int'>
print(type([0, 1, 2]))
# <class 'list'>
type() işlevinin dönüş değeri, str veya int gibi bir tür nesnesidir.
print(type(type('string')))
# <class 'type'>
print(type(str))
# <class 'type'>
Nesne tipinin belirlenmesi:type(),isinstance()
Türü belirlemek için type() veya isinstance() kullanın.
type() kullanarak tip belirleme
type()’nin dönüş değerini rastgele bir tiple karşılaştırarak, nesnenin herhangi bir türden olup olmadığı belirlenebilir.
print(type('string') is str)
# True
print(type('string') is int)
# False
def is_str(v):
return type(v) is str
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
Birkaç türden biri olup olmadığını belirlemek istiyorsanız, in operatörünü ve çeşitli türlerden oluşan bir demet veya liste kullanın.
def is_str_or_int(v):
return type(v) in (str, int)
print(is_str_or_int('string'))
# True
print(is_str_or_int(100))
# True
print(is_str_or_int([0, 1, 2]))
# False
Argüman tipine bağlı olarak işlemeyi değiştiren fonksiyonlar da tanımlanabilir.
def type_condition(v):
if type(v) is str:
print('type is str')
elif type(v) is int:
print('type is int')
else:
print('type is not str or int')
type_condition('string')
# type is str
type_condition(100)
# type is int
type_condition([0, 1, 2])
# type is not str or int
isinstance() kullanarak tür belirleme
isinstance(object, class), ilk argümanın nesnesi ikinci argümanın türünün veya alt sınıfının bir örneğiyse true değerini döndüren bir işlevdir.
İkinci argüman bir dizi tip olabilir. Her iki türden bir örnekse, true döndürülür.
print(isinstance('string', str))
# True
print(isinstance(100, str))
# False
print(isinstance(100, (int, str)))
# True
type() kullanarak tip belirleme örneğine benzer bir fonksiyon aşağıdaki gibi yazılabilir.
def is_str(v):
return isinstance(v, str)
print(is_str('string'))
# True
print(is_str(100))
# False
print(is_str([0, 1, 2]))
# False
def is_str_or_int(v):
return isinstance(v, (int, str))
print(is_str_or_int('string'))
# True
print(is_str_or_int(100))
# True
print(is_str_or_int([0, 1, 2]))
# False
def type_condition(v):
if isinstance(v, str):
print('type is str')
elif isinstance(v, int):
print('type is int')
else:
print('type is not str or int')
type_condition('string')
# type is str
type_condition(100)
# type is int
type_condition([0, 1, 2])
# type is not str or int
type() ve isinstance() arasındaki fark
type() ve isinstance() arasındaki fark, isinstance() öğesinin ikinci argüman olarak belirtilen sınıfı miras alan alt sınıf örnekleri için true döndürmesidir.
Örneğin, aşağıdaki üst sınıf (temel sınıf) ve alt sınıf (türetilmiş sınıf) tanımlanmıştır.
class Base:
pass
class Derive(Base):
pass
base = Base()
print(type(base))
# <class '__main__.Base'>
derive = Derive()
print(type(derive))
# <class '__main__.Derive'>
type() kullanarak tür belirleme, yalnızca türler eşleştiğinde true değerini döndürür, ancak isinstance(), üst sınıflar için bile true değerini döndürür.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
Örneğin bool tipi bool (true,false) gibi standart tipler için bile dikkatli olunmalıdır. bool, tamsayı türünün bir alt sınıfıdır, bu nedenle isinstance(), miras alındığı bir int için bile true değerini döndürür.
print(type(True))
# <class 'bool'>
print(type(True) is bool)
# True
print(type(True) is int)
# False
print(isinstance(True, bool))
# True
print(isinstance(True, int))
# True
Tam türü belirlemek istiyorsanız type(); kalıtımla türün dikkate alınmasını istiyorsanız, isinstance()’ı kullanın.
Bir sınıfın başka bir sınıfın alt sınıfı olup olmadığını belirlemek için yerleşik issubclass() işlevi de sağlanmıştır.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False