type(), isinstance() tyypin saamiseksi ja määrittämiseksi Pythonissa

liiketoiminta

Pythonissa sisäänrakennettuja funktioita type() ja isinstance() käytetään objektin, esimerkiksi muuttujan, tyypin hakemiseen ja tarkistamiseen sekä sen määrittämiseen, onko se tietyn tyyppinen.

Seuraavat sisällöt selitetään tässä yhdessä esimerkkikoodin kanssa.

  • Hanki ja tarkista objektin tyyppi:type()
  • Kohteen tyypin määrittäminen:type(),isinstance()
    • Tyypin määrittäminen type() -toiminnolla
    • Tyypin määrittäminen isinstance() -toiminnon avulla
    • Type():n ja isinstance():n välinen ero

Objektin tyypin määrittämisen sijaan voidaan käyttää poikkeusten käsittelyä tai sisäänrakennettua funktiota hasattr() sen määrittämiseen, onko objektilla oikeat metodit ja attribuutit.

Hanki ja tarkista objektin tyyppi: type()

type(object) on funktio, joka palauttaa argumenttina annetun objektin tyypin. Tätä voidaan käyttää objektin tyypin selvittämiseen.

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

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

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

type():n paluuarvo on tyyppiobjekti, kuten str tai int.

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

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

Kohteen tyypin määrittäminen: type(), isinstance()

Käytä type() tai isinstance() -toimintoa tyypin määrittämiseen.

Tyypin määrittäminen type() -toiminnolla

Vertaamalla type():n paluuarvoa mielivaltaiseen tyyppiin voidaan määrittää, onko objekti minkä tahansa tyyppinen.

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

Jos haluat määrittää, onko se yksi useammasta tyypistä, käytä in-operaattoria ja useamman tyypin tupelia tai listaa.

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

On myös mahdollista määritellä funktioita, joiden käsittely muuttuu argumentin tyypin mukaan.

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

Tyypin määrittäminen isinstance() -toiminnon avulla

isinstance(object, class) on funktio, joka palauttaa arvon true, jos ensimmäisen argumentin objekti on toisen argumentin tyypin tai aliluokan instanssi.

Toinen argumentti voi olla tyyppien sarja. Jos se on jommankumman tyypin instanssi, palautetaan true.

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

print(isinstance(100, str))
# False

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

Samanlainen funktio kuin esimerkki tyypin määrittämisestä type():n avulla voidaan kirjoittaa seuraavasti

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():n ja isinstance():n välinen ero

Type() ja isinstance() eroavat toisistaan siten, että isinstance() palauttaa totuuden sellaisten aliluokkien instansseista, jotka perivät toisena argumenttina määritetyn luokan.

Esimerkiksi seuraavat superclass (perusluokka) ja subclass (johdettu luokka) on määritelty seuraavasti

class Base:
    pass

class Derive(Base):
    pass

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

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

Tyyppien määrittäminen type()-toiminnolla palauttaa true-tuloksen vain silloin, kun tyypit täsmäävät, mutta isinstance()-toiminto palauttaa true-tuloksen myös superluokille.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Jopa standardityyppien, esimerkiksi boolean-tyypin bool (true,false), kohdalla on noudatettava varovaisuutta. bool on kokonaislukutyypin alaluokka, joten isinstance() palauttaa true-tuloksen myös int-tyypille, josta se on peritty.

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

Jos haluat määrittää tarkan tyypin, käytä type(); jos haluat määrittää tyypin periytyminen huomioon ottaen, käytä isinstance().

Sisäänrakennetulla funktiolla issubclass() voidaan myös määrittää, onko luokka toisen luokan aliluokka.

print(issubclass(bool, int))
# True

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