Í 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ð.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
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