Katika Python, aina za kazi zilizojengwa ndani () na isinstance () hutumiwa kupata na kuangalia aina ya kitu, kama vile kutofautisha, na kuamua ikiwa ni ya aina fulani.
- class type(object) — Built-in Functions — Python 3.10.4 Documentation
- isinstance(object, classinfo) — Built-in Functions — Python 3.10.4 Documentation
Yaliyomo yafuatayo yamefafanuliwa hapa, pamoja na nambari ya sampuli.
- Pata na uangalie aina ya kitu:
type()
- Uamuzi wa aina ya kitu:
type()
,isinstance()
- Uamuzi wa aina kwa kutumia type()
- Uamuzi wa aina kwa kutumia isinstance()
- Tofauti kati ya type() na isinstance()
Badala ya kubainisha aina ya kitu, mtu anaweza kutumia utunzaji wa kipekee au kazi iliyojengewa ndani hasattr() ili kubaini ikiwa kitu kina mbinu na sifa sahihi.
Pata na uangalie aina ya kitu:aina ()
type(object) ni chaguo la kukokotoa ambalo hurejesha aina ya kitu kilichopitishwa kama hoja. Hii inaweza kutumika kujua aina ya kitu.
print(type('string'))
# <class 'str'>
print(type(100))
# <class 'int'>
print(type([0, 1, 2]))
# <class 'list'>
Thamani ya kurudi ya aina() ni aina ya kitu kama vile str au int.
print(type(type('string')))
# <class 'type'>
print(type(str))
# <class 'type'>
Uamuzi wa aina ya kitu:type(),isinstance()
Tumia type() au isinstance() kuamua aina.
Uamuzi wa aina kwa kutumia type()
Kwa kulinganisha thamani ya kurudi ya type() na aina ya kiholela, inaweza kubainishwa ikiwa kitu ni cha aina yoyote.
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
Ikiwa unataka kuamua ikiwa ni moja ya aina kadhaa, tumia in operator na tuple au orodha ya aina kadhaa.
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
Pia inawezekana kufafanua vipengele vinavyobadilisha usindikaji kulingana na aina ya hoja.
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
Uamuzi wa aina kwa kutumia isinstance()
isinstance(object, class) ni chaguo la kukokotoa ambalo linarudi kuwa kweli ikiwa kitu cha hoja ya kwanza ni mfano wa aina au darasa ndogo la hoja ya pili.
Hoja ya pili inaweza kuwa tuple ya aina. Ikiwa ni mfano wa aina yoyote ile, true inarejeshwa.
print(isinstance('string', str))
# True
print(isinstance(100, str))
# False
print(isinstance(100, (int, str)))
# True
Kazi sawa na mfano wa uamuzi wa aina kwa kutumia type() inaweza kuandikwa kama ifuatavyo
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
Tofauti kati ya type() na isinstance()
Tofauti kati ya type() na isinstance() ni kwamba isinstance() inarudi kuwa kweli kwa visa vya vijamii ambavyo vinarithi darasa lililoainishwa kama hoja ya pili.
Kwa mfano, superclass ifuatayo (darasa la msingi) na darasa ndogo (darasa inayotokana) imefafanuliwa
class Base:
pass
class Derive(Base):
pass
base = Base()
print(type(base))
# <class '__main__.Base'>
derive = Derive()
print(type(derive))
# <class '__main__.Derive'>
Uamuzi wa aina kwa kutumia type() hurejesha kweli tu wakati aina zinalingana, lakini isinstance() inarudi kuwa kweli hata kwa darasa kuu.
print(type(derive) is Derive)
# True
print(type(derive) is Base)
# False
print(isinstance(derive, Derive))
# True
print(isinstance(derive, Base))
# True
Hata kwa aina za kawaida, kwa mfano, aina ya boolean bool (kweli, uongo), utunzaji lazima uchukuliwe. bool ni aina ndogo ya aina kamili, kwa hivyo isinstance() inarudi kuwa kweli hata kwa int ambayo imerithiwa.
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
Ikiwa unataka kuamua aina halisi, tumia aina (); ikiwa unataka kuamua aina na urithi unaozingatiwa, tumia isinstance().
Chaguo za kukokotoa zilizojengewa ndani issubclass() pia hutolewa ili kubainisha kama darasa ni aina ndogo ya darasa lingine.
print(issubclass(bool, int))
# True
print(issubclass(bool, float))
# False