Python’da türü almak ve belirlemek için type(), isinstance()

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.

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
Copied title and URL