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