Python-да түрін алу және анықтау үшін type(), isinstance().

Іскерлік

Python тілінде type() және isinstance() кіріктірілген функциялар айнымалы сияқты нысан түрін алу және тексеру және оның белгілі бір түрге жататынын анықтау үшін пайдаланылады.

Төмендегі мазмұн үлгі кодымен бірге осы жерде түсіндіріледі.

  • Объект түрін алу және тексеру:type()
  • Объектінің түрін анықтау:type(),isinstance()
    • type() арқылы типті анықтау
    • isinstance() көмегімен типті анықтау
    • Type() және isinstance() арасындағы айырмашылық

Нысанның түрін анықтаудың орнына, объектінің дұрыс әдістері мен атрибуттары бар-жоғын анықтау үшін ерекше жағдайларды өңдеуді немесе кірістірілген hasattr() функциясын пайдалануға болады.

Объект түрін алу және тексеру:type()

type(объект) — аргумент ретінде берілген нысан түрін қайтаратын функция. Бұл нысанның түрін білу үшін пайдаланылуы мүмкін.

print(type('string'))
# <class 'str'>

print(type(100))
# <class 'int'>

print(type([0, 1, 2]))
# <class 'list'>

type() қайтару мәні str немесе int сияқты тип нысаны болып табылады.

print(type(type('string')))
# <class 'type'>

print(type(str))
# <class 'type'>

Объектінің түрін анықтау:type(),isinstance()

Түрді анықтау үшін type() немесе isinstance() пайдаланыңыз.

type() арқылы типті анықтау

type() қайтару мәнін ерікті түрмен салыстыру арқылы нысанның кез келген типті екенін анықтауға болады.

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

Егер оның бірнеше түрдің бірі екенін анықтағыңыз келсе, in операторын және кортежді немесе бірнеше түрлердің тізімін пайдаланыңыз.

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

Аргумент түріне байланысты өңдеуді өзгертетін функцияларды анықтауға да болады.

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() көмегімен типті анықтау

isinstance(нысан, сынып) бірінші аргументтің нысаны екінші аргумент түрінің немесе ішкі сыныбының данасы болса, ақиқат мәнін қайтаратын функция.

Екінші аргумент типтердің кортежі болуы мүмкін. Егер ол кез келген түрдің данасы болса, true мәні қайтарылады.

print(isinstance('string', str))
# True

print(isinstance(100, str))
# False

print(isinstance(100, (int, str)))
# True

type() көмегімен типті анықтау мысалына ұқсас функцияны келесідей жазуға болады

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() және isinstance() арасындағы айырмашылық

Type() мен isinstance() арасындағы айырмашылық мынада: isinstance() екінші аргумент ретінде көрсетілген сыныпты иеленетін ішкі сыныптардың даналары үшін ақиқат мәнін қайтарады.

Мысалы, келесі суперкласс (негізгі класс) және ішкі сынып (туынды сынып) анықталған

class Base:
    pass

class Derive(Base):
    pass

base = Base()
print(type(base))
# <class '__main__.Base'>

derive = Derive()
print(type(derive))
# <class '__main__.Derive'>

Type() көмегімен типті анықтау тек түрлер сәйкес болғанда ғана ақиқат мәнін қайтарады, бірақ isinstance() тіпті суперсыныптар үшін де ақиқат мәнін қайтарады.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Тіпті стандартты түрлер үшін, мысалы, логикалық түрдегі bool (шын, жалған), абай болу керек. bool – бүтін түрдегі қосалқы класс, сондықтан isinstance() мұраланған int үшін де шын мәнін қайтарады.

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

Нақты түрін анықтағыңыз келсе type(); мұрагерлігі ескерілген түрді анықтағыңыз келсе, isinstance() пайдаланыңыз.

Кірістірілген функция issubclass() кластың басқа сыныптың қосалқы сыныбы екенін анықтау үшін де қамтамасыз етілген.

print(issubclass(bool, int))
# True

print(issubclass(bool, float))
# False
Copied title and URL