типе(), исинстанце() да бисте добили и одредили тип у Питхон-у

Бусинесс

У Питхон-у, уграђене функције типе() и исинстанце() се користе за добијање и проверу типа објекта, као што је променљива, и за утврђивање да ли је он одређеног типа.

Овде је објашњен следећи садржај, заједно са примером кода.

  • Набавите и проверите тип објекта: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
Copied title and URL