Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Hàm type() và isinstance() trong Python: Kiểm tra kiểu dữ liệu

Python cung cấp 2 cách chính để kiểm tra kiểu của đối tượng: type() (kiểu chính xác) và isinstance() (kiểm tra kế thừa/hierarchy).

1. type(object)

Trả về đối tượng type của object. So sánh chính xác (exact type).

Ví dụ

val = 5
print(type(val))           # 
print(type(val) == int)    # True
print(type(val) == float)  # False

# Kiểm tra type chính xác
if type(val) is int:
    print("Là int chính xác")

2. isinstance(object, classinfo)

Trả về True nếu object là instance của classinfo hoặc subclass của nó. Hỗ trợ tuple các class.

Ví dụ cơ bản

nums = {1, 2, 3}
print(isinstance(nums, set))      # True
print(isinstance(nums, (set, list, dict)))  # True (tuple check)

# Với inheritance
class Animal: pass
class Dog(Animal): pass

dog = Dog()
print(isinstance(dog, Dog))    # True
print(isinstance(dog, Animal)) # True (subclass)
print(isinstance(dog, object)) # True (mọi class kế thừa object)

So sánh type() vs isinstance()

Tiêu chítype()isinstance()
Kiểm tra kế thừaKhông (chỉ exact type)Có (True cho subclass)
Đa kiểu (tuple)KhôngCó: isinstance(x, (int, float))
Hiệu năngNhanh hơn chútChậm hơn không đáng kể
Best practiceHiếm dùng trực tiếpKhuyến nghị (PEP 8, polymorphic code)

Ví dụ thực tế: Kiểm tra số (int hoặc float)

def process_number(value):
    if isinstance(value, (int, float)) and not isinstance(value, bool):
        # bool là subclass của int trong Python!
        print(f"Xử lý số: {value}")
    else:
        print("Không phải số")

process_number(10)      # OK
process_number(3.14)    # OK
process_number(True)    # Không phải số (loại trừ bool)
process_number("10")    # Không phải số

Kết luận

Luôn ưu tiên isinstance() cho type checking trong code production. Dùng type() is SomeClass chỉ khi cần kiểm tra chính xác kiểu (ví dụ: serialization, debug). Nhớ loại trừ bool khi kiểm tra số vì bool subclass int.