Python тілінде type() және isinstance() кіріктірілген функциялар айнымалы сияқты нысан түрін алу және тексеру және оның белгілі бір түрге жататынын анықтау үшін пайдаланылады.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
Төмендегі мазмұн үлгі кодымен бірге осы жерде түсіндіріледі.
- Объект түрін алу және тексеру:
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