type(), isinstance() tüübi saamiseks ja määramiseks Pythonis

Äri

Pythonis kasutatakse sisseehitatud funktsioone type() ja isinstance(), et saada ja kontrollida objekti, näiteks muutuja, tüüpi ning teha kindlaks, kas see on teatud tüüpi.

Siin selgitatakse järgmist sisu koos näidiskoodiga.

  • Objekti tüübi hankimine ja kontrollimine:type()
  • Objekti tüübi määramine:type(),isinstance()
    • Tüübi määramine type() abil
    • Tüübi määramine isinstance() abil
    • Erinevus type() ja isinstance() vahel

Objekti tüübi määramise asemel võib kasutada erandite käsitlemist või sisseehitatud funktsiooni hasattr(), et teha kindlaks, kas objektil on õiged meetodid ja atribuudid.

Objekti tüübi hankimine ja kontrollimine: type()

type(object) on funktsioon, mis tagastab argumendiks antud objekti tüübi. Seda saab kasutada objekti tüübi väljaselgitamiseks.

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

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

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

Type() tagastusväärtus on tüübiobjekt, näiteks str või int.

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

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

Objekti tüübi määramine: type(), isinstance()

Tüübi määramiseks kasutage type() või isinstance().

Tüübi määramine type() abil

Võrreldes type() tagastusväärtust suvalise tüübiga, saab kindlaks teha, kas objekt on mis tahes tüüpi.

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

Kui soovite kindlaks teha, kas tegemist on ühega mitmest tüübist, kasutage in-operaatorit ja mitmest tüübist koosnevat tuplit või loendit.

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

Samuti on võimalik defineerida funktsioone, mis muudavad töötlemist sõltuvalt argumendi tüübist.

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

Tüübi määramine isinstance() abil

isinstance(object, class) on funktsioon, mis tagastab tõese tulemuse, kui esimese argumendi objekt on teise argumendi tüübi või alamklassi eksemplar.

Teiseks argumendiks võib olla tüüpide tupel. Kui see on kummagi tüübi eksemplar, tagastatakse true.

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

print(isinstance(100, str))
# False

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

Tüübi määramise näitega sarnase funktsiooni type() abil saab kirjutada järgmiselt

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

Erinevus type() ja isinstance() vahel

Erinevus type() ja isinstance() vahel seisneb selles, et isinstance() tagastab tõese väärtuse nende alamklasside instantside puhul, mis pärivad teise argumendina määratud klassi.

Näiteks on määratletud järgmine superklass (baasklass) ja alamklass (tuletatud klass)

class Base:
    pass

class Derive(Base):
    pass

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

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

Tüübi määramine type() abil tagastab true ainult siis, kui tüübid ühtivad, kuid isinstance() tagastab true ka superklasside puhul.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Isegi standardtüüpide, näiteks boole'i tüübi bool (true,false) puhul tuleb olla ettevaatlik. bool on integer-tüübi alamklass, nii et isinstance() tagastab true isegi int-tüübi puhul, millest see on päritud.

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

Kui soovite määrata täpse tüübi, kasutage type(); kui soovite määrata tüübi koos pärimise arvestamisega, kasutage isinstance().

Sisseehitatud funktsioon issubclass() on ette nähtud ka selleks, et määrata, kas klass on teise klassi alamklass.

print(issubclass(bool, int))
# True

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