jinis (), isinstance () kanggo njaluk lan nemtokake jinis ing Python

Bisnis

Ing Python, dibangun ing jinis fungsi () lan isinstance () digunakake kanggo njaluk lan mriksa jinis obyek, kayata variabel, lan kanggo nemtokake apa iku saka jinis tartamtu.

Isi ing ngisor iki diterangake ing kene, bebarengan karo kode conto.

  • Entuk lan mriksa jinis obyek:type()
  • Penentuan jinis obyek:type(),isinstance()
    • Penentuan jinis nggunakake jinis ()
    • Penentuan jinis nggunakake isinstance()
    • Bedane antarane jinis() lan isinstance()

Tinimbang nemtokake jinis obyek, siji bisa nggunakake pangecualian penanganan utawa dibangun ing fungsi hasattr () kanggo nemtokake apa obyek wis cara bener lan atribut.

Entuk lan mriksa jinis obyek:jinis()

type(obyek) minangka fungsi sing ngasilake jinis obyek sing diterusake minangka argumen. Iki bisa digunakake kanggo ngerteni jinis obyek.

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

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

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

Nilai bali saka jinis () minangka obyek jinis kayata str utawa int.

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

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

Penentuan jinis obyek:type(),isinstance()

Gunakake jinis () utawa isinstance () kanggo nemtokake jinis.

Penentuan jinis nggunakake jinis ()

Kanthi mbandingaken Nilai bali saka jinis () karo jinis kasepakatan, bisa ditemtokake yen obyek saka sembarang tipe.

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

Yen sampeyan pengin nemtokake manawa iku salah siji saka sawetara jinis, gunakake operator in lan tuple utawa dhaptar sawetara jinis.

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

Sampeyan uga bisa nemtokake fungsi sing ngganti pangolahan gumantung saka jinis argumen.

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

Penentuan jinis nggunakake isinstance()

isinstance(obyek, kelas) minangka fungsi sing ngasilake bener yen obyek saka argumen pisanan minangka conto saka jinis utawa subclass saka argumen kapindho.

Argumentasi kapindho bisa dadi tuple jinis. Yen conto saka salah siji jinis, bener bali.

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

print(isinstance(100, str))
# False

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

Fungsi sing padha karo conto nemtokake jinis nggunakake jinis () bisa ditulis kaya ing ngisor iki

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

Bedane antarane jinis() lan isinstance()

Bentenipun antarane jinis () lan isinstance () iku isinstance () bali bener kanggo kedadean saka subclasses sing marisi kelas kasebut minangka argumen kapindho.

Contone, superclass ing ngisor iki (kelas dasar) lan subclass (kelas asale) ditetepake

class Base:
    pass

class Derive(Base):
    pass

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

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

Tipe netepake nggunakake jinis () ngasilake bener mung nalika jinis cocog, nanging isinstance () bali bener malah kanggo superclasses.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Malah kanggo jinis standar, contone, bool jinis boolean (bener, salah), kudu ati-ati. bool minangka subclass saka jinis integer, dadi isinstance () ngasilake bener sanajan kanggo int sing diwarisake.

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

Yen sampeyan pengin nemtokake jinis pas, nggunakake jinis (); yen sampeyan pengin nemtokake jinis karo warisan dijupuk menyang akun, nggunakake isinstance ().

Fungsi dibangun ing issubclass () uga kasedhiya kanggo nemtokake apa kelas iku subclass saka kelas liyane.

print(issubclass(bool, int))
# True

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