У Питхон-у, уграђене функције типе() и исинстанце() се користе за добијање и проверу типа објекта, као што је променљива, и за утврђивање да ли је он одређеног типа.
- 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()
- Одређивање типа помоћу типе()
- Одређивање типа помоћу исинстанце()
- Разлика између типе() и исинстанце()
Уместо одређивања типа објекта, може се користити руковање изузетком или уграђена функција хасаттр() да би се утврдило да ли објекат има исправне методе и атрибуте.
Набавите и проверите тип објекта:тип()
тип(објекат) је функција која враћа тип објекта који је прослеђен као аргумент. Ово се може користити да се сазна тип објекта.
print(type('string'))
# <class 'str'>
print(type(100))
# <class 'int'>
print(type([0, 1, 2]))
# <class 'list'>
Повратна вредност типа() је објекат типа као што је стр или инт.
print(type(type('string')))
# <class 'type'>
print(type(str))
# <class 'type'>
Одређивање типа објекта:type(),isinstance()
Користите типе() или исинстанце() да одредите тип.
Одређивање типа помоћу типе()
Упоређивањем повратне вредности типа() са произвољним типом, може се утврдити да ли је објекат било ког типа.
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
Ако желите да утврдите да ли је то један од неколико типова, користите оператор ин и тупле или листу неколико типова.
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
Одређивање типа помоћу исинстанце()
исинстанце(објекат, класа) је функција која враћа тачно ако је објекат првог аргумента инстанца типа или подкласе другог аргумента.
Други аргумент може бити низ типова. Ако је инстанца било ког типа, враћа се труе.
print(isinstance('string', str))
# True
print(isinstance(100, str))
# False
print(isinstance(100, (int, str)))
# True
Функција слична примеру одређивања типа помоћу типе() може се написати на следећи начин
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
Разлика између типе() и исинстанце()
Разлика између типе() и исинстанце() је у томе што исинстанце() враћа труе за инстанце поткласа које наслеђују класу наведену као други аргумент.
На пример, дефинисане су следеће суперкласе (основна класа) и поткласа (изведена класа).
class Base:
pass
class Derive(Base):
pass
base = Base()
print(type(base))
# <class '__main__.Base'>
derive = Derive()
print(type(derive))
# <class '__main__.Derive'>
Одређивање типа помоћу типе() враћа труе само када се типови подударају, али исинстанце() враћа труе чак и за суперкласе.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
Чак и за стандардне типове, на пример, логички тип боол (тачно, нетачно), мора се водити рачуна. боол је поткласа целобројног типа, тако да исинстанце() враћа труе чак и за инт од којег је наслеђен.
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
Ако желите да одредите тачан тип, користите типе(); ако желите да одредите тип са узетом у обзир наслеђе, користите исинстанце().
Уграђена функција иссубцласс() је такође обезбеђена да одреди да ли је класа поткласа друге класе.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False