type(), isinstance() til að fá og ákvarða tegund í Python

Viðskipti

Í Python eru innbyggðu föllin type() og isinstance() notuð til að fá og athuga tegund hlutar, eins og breytu, og til að ákvarða hvort hann sé af ákveðinni gerð.

Eftirfarandi innihald er útskýrt hér ásamt sýnishornskóða.

  • Fáðu og athugaðu tegund hlutar:type()
  • Ákvörðun hlutargerðar:type(),isinstance()
    • Tegundarákvörðun með því að nota type()
    • Tegundarákvörðun með isinstance()
    • Mismunur á type() og isinstance()

Í stað þess að ákvarða tegund hlutar er hægt að nota undantekningarmeðferð eða innbyggða fallið hasattr() til að ákvarða hvort hlutur hafi réttar aðferðir og eiginleika.

Fáðu og athugaðu tegund hlutar:gerð()

type(hlutur) er fall sem skilar gerð hlutarins sem er send sem rök. Þetta er hægt að nota til að finna út tegund hlutar.

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

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

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

Skilagildi type() er tegundarhlutur eins og str eða int.

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

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

Ákvörðun hlutargerðar:type(),isinstance()

Notaðu type() eða isinstance() til að ákvarða tegundina.

Tegundarákvörðun með því að nota type()

Með því að bera saman skilgildi type() við handahófskennda gerð er hægt að ákvarða hvort hluturinn sé af einhverri gerð.

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

Ef þú vilt ákvarða hvort það sé ein af mörgum gerðum, notaðu í stjórnanda og tuple eða lista yfir nokkrar tegundir.

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

Einnig er hægt að skilgreina föll sem breyta vinnslu eftir tegund röksemda.

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

Tegundarákvörðun með isinstance()

isinstance(hlutur, flokkur) er fall sem skilar satt ef hlutur fyrri röksemdafærslunnar er tilvik af gerðinni eða undirflokki seinni rifrildarinnar.

Önnur rökin geta verið túlkun af gerðum. Ef það er tilvik af annarri hvorri gerðinni er true skilað.

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

print(isinstance(100, str))
# False

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

Fall svipað og dæmið um tegundarákvörðun með því að nota type() er hægt að skrifa á eftirfarandi hátt

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

Mismunur á type() og isinstance()

Munurinn á type() og isinstance() er sá að isinstance() skilar satt fyrir tilvik af undirflokkum sem erfa flokkinn sem tilgreindur er sem önnur rök.

Til dæmis er eftirfarandi ofurflokkur (grunnflokkur) og undirflokkur (afleiddur flokkur) skilgreindur

class Base:
    pass

class Derive(Base):
    pass

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

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

Tegundarákvörðun með því að nota type() skilar aðeins satt þegar tegundirnar passa, en isinstance() skilar satt jafnvel fyrir ofurflokka.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Jafnvel fyrir staðlaðar tegundir, til dæmis, boolean gerð bool (satt, ósatt), verður að gæta varúðar. bool er undirflokkur af heiltölugerð, þannig að isinstance() skilar satt jafnvel fyrir int sem það er arft úr.

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

Ef þú vilt ákvarða nákvæma gerð, notaðu type(); ef þú vilt ákvarða tegundina með arfleifð í huga skaltu nota isinstance().

Innbyggða aðgerðin issubclass() er einnig til staðar til að ákvarða hvort flokkur sé undirflokkur annars flokks.

print(issubclass(bool, int))
# True

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