type (), isinstance () để lấy và xác định kiểu trong Python

Kinh doanh

Trong Python, các hàm tích hợp kiểu () và isinstance () được sử dụng để lấy và kiểm tra kiểu của một đối tượng, chẳng hạn như một biến và để xác định xem nó có thuộc một kiểu cụ thể hay không.

Các nội dung sau đây được giải thích ở đây, cùng với mã mẫu.

  • Lấy và kiểm tra loại đối tượng:type()
  • Xác định loại đối tượng:type(),isinstance()
    • Xác định kiểu bằng cách sử dụng kiểu ()
    • Xác định loại bằng cách sử dụng isinstance ()
    • Sự khác biệt giữa type () và isinstance ()

Thay vì xác định kiểu của một đối tượng, người ta có thể sử dụng xử lý ngoại lệ hoặc hàm tích hợp sẵn hasattr () để xác định xem một đối tượng có các phương thức và thuộc tính chính xác hay không.

Lấy và kiểm tra loại đối tượng:gõ phím()

type (object) là một hàm trả về kiểu của đối tượng được truyền dưới dạng đối số. Điều này có thể được sử dụng để tìm ra loại của một đối tượng.

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

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

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

Giá trị trả về của kiểu () là một đối tượng kiểu như str hoặc int.

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

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

Xác định loại đối tượng:type(),isinstance()

Sử dụng type () hoặc isinstance () để xác định kiểu.

Xác định kiểu bằng cách sử dụng kiểu ()

Bằng cách so sánh giá trị trả về của kiểu () với một kiểu tùy ý, nó có thể được xác định nếu đối tượng thuộc bất kỳ kiểu nào.

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

Nếu bạn muốn xác định xem nó có phải là một trong một số kiểu hay không, hãy sử dụng toán tử in và một bộ hoặc danh sách một số kiểu.

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

Cũng có thể xác định các hàm thay đổi quá trình xử lý tùy thuộc vào kiểu đối số.

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

Xác định loại bằng cách sử dụng isinstance ()

isinstance (đối tượng, lớp) là một hàm trả về true nếu đối tượng của đối số đầu tiên là một thể hiện của kiểu hoặc lớp con của đối số thứ hai.

Đối số thứ hai có thể là nhiều kiểu. Nếu nó là một phiên bản của một trong hai kiểu, giá trị true được trả về.

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

print(isinstance(100, str))
# False

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

Một hàm tương tự như ví dụ về xác định kiểu sử dụng kiểu () có thể được viết như sau

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

Sự khác biệt giữa type () và isinstance ()

Sự khác biệt giữa kiểu () và isinstance () là isinstance () trả về true cho các trường hợp của lớp con kế thừa lớp được chỉ định làm đối số thứ hai.

Ví dụ, lớp cha (lớp cơ sở) và lớp con (lớp dẫn xuất) sau được định nghĩa

class Base:
    pass

class Derive(Base):
    pass

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

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

Việc xác định kiểu bằng cách sử dụng type () chỉ trả về true khi các kiểu khớp nhau, nhưng isinstance () trả về true ngay cả đối với các lớp cha.

print(type(derive) is Derive)
# True

print(type(derive) is Base)
# False

print(isinstance(derive, Derive))
# True

print(isinstance(derive, Base))
# True

Ngay cả đối với các kiểu tiêu chuẩn, ví dụ, kiểu boolean bool (true, false), cần phải cẩn thận. bool là một lớp con của kiểu số nguyên, vì vậy isinstance () trả về true ngay cả đối với một int mà nó được kế thừa.

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

Nếu bạn muốn xác định kiểu chính xác, hãy sử dụng type (); nếu bạn muốn xác định kiểu có tính đến tính kế thừa, hãy sử dụng isinstance ().

Hàm tạo sẵn Issubclass () cũng được cung cấp để xác định xem một lớp có phải là lớp con của một lớp khác hay không.

print(issubclass(bool, int))
# True

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