type(), isinstance() kupata na kuamua aina kwenye Python

Biashara

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.

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
Copied title and URL