type(), isinstance() untuk mendapatkan dan menentukan jenis dalam Python

Perniagaan

Dalam Python, fungsi terbina dalam type() dan isinstance() digunakan untuk mendapatkan dan menyemak jenis objek, seperti pembolehubah, dan untuk menentukan sama ada ia daripada jenis tertentu.

Kandungan berikut diterangkan di sini, bersama dengan kod sampel.

  • Dapatkan dan semak jenis objek:type()
  • Penentuan jenis objek:type(),isinstance()
    • Penentuan jenis menggunakan jenis()
    • Jenis penentuan menggunakan isinstance()
    • Perbezaan antara jenis() dan isinstance()

Daripada menentukan jenis objek, seseorang boleh menggunakan pengendalian pengecualian atau fungsi terbina dalam hasattr() untuk menentukan sama ada objek mempunyai kaedah dan atribut yang betul.

Dapatkan dan semak jenis objek:jenis()

type(objek) ialah fungsi yang mengembalikan jenis objek yang diluluskan sebagai hujah. Ini boleh digunakan untuk mengetahui jenis objek.

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

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

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

Nilai pulangan type() ialah objek jenis seperti str atau int.

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

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

Penentuan jenis objek:type(),isinstance()

Gunakan type() atau isinstance() untuk menentukan jenis.

Penentuan jenis menggunakan jenis()

Dengan membandingkan nilai pulangan type() dengan jenis sewenang-wenangnya, ia boleh ditentukan sama ada objek itu daripada sebarang jenis.

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

Jika anda ingin menentukan sama ada ia adalah salah satu daripada beberapa jenis, gunakan operator in dan tuple atau senarai beberapa jenis.

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

Ia juga mungkin untuk menentukan fungsi yang mengubah pemprosesan bergantung pada jenis hujah.

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

Jenis penentuan menggunakan isinstance()

isinstance(objek, kelas) ialah fungsi yang mengembalikan benar jika objek argumen pertama ialah contoh jenis atau subkelas argumen kedua.

Hujah kedua boleh menjadi tuple jenis. Jika ia adalah contoh dari mana-mana jenis, benar dikembalikan.

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

print(isinstance(100, str))
# False

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

Fungsi yang serupa dengan contoh penentuan jenis menggunakan type() boleh ditulis seperti berikut

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

Perbezaan antara jenis() dan isinstance()

Perbezaan antara type() dan isinstance() ialah isinstance() mengembalikan true untuk contoh subkelas yang mewarisi kelas yang ditentukan sebagai hujah kedua.

Sebagai contoh, superclass berikut (kelas asas) dan subclass (kelas terbitan) ditakrifkan

class Base:
    pass

class Derive(Base):
    pass

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

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

Penentuan jenis menggunakan type() mengembalikan benar hanya apabila jenis sepadan, tetapi isinstance() mengembalikan benar walaupun untuk superclass.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Malah untuk jenis standard, contohnya, jenis boolean bool (benar, salah), perlu berhati-hati. bool ialah subkelas jenis integer, jadi isinstance() mengembalikan benar walaupun untuk int yang diwarisi.

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

Jika anda ingin menentukan jenis yang tepat, gunakan type(); jika anda ingin menentukan jenis dengan warisan diambil kira, gunakan isinstance().

Fungsi terbina dalam issubclass() juga disediakan untuk menentukan sama ada kelas adalah subkelas kelas lain.

print(issubclass(bool, int))
# True

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