Cách kiểm tra loại dữ liệu trong Python (loại so với isinstance)
Tìm hiểu cách kiểm tra các loại dữ liệu trong Python. Hiểu thời điểm sử dụng type() so với isinstance(), xử lý các lớp tùy chỉnh và viết xác thực kiểm tra loại an toàn.
Tổng quan
Python là ngôn ngữ được gõ động, nghĩa là các biến có thể chứa giá trị của bất kỳ loại dữ liệu nào và loại của chúng có thể thay đổi trong quá trình thực thi. Mặc dù tính linh hoạt này tăng tốc độ phát triển ban đầu nhưng nó cũng yêu cầu bạn xác minh các loại biến trong thời gian chạy trước khi chạy các thao tác theo loại cụ thể, chẳng hạn như thực hiện số học trên số nguyên hoặc gọi các phương thức chuỗi.
Để kiểm tra kiểu dữ liệu của một đối tượng, Python cung cấp hai hàm chính: `type()` và `isinstance()`. Hàm `type(obj)` trả về loại lớp chính xác của đối tượng. Mặc dù bạn có thể sử dụng `type(obj) == int` để xác minh xem một số có phải là số nguyên hay không, nhưng phương pháp này thường không được khuyến khích vì nó không hỗ trợ các cấu trúc kế thừa (một lớp con của một số nguyên sẽ đánh giá là `False`).
Cách kiểm tra kiểu Pythonic được đề xuất là `isinstance(obj, class_info)`. Hàm này kiểm tra xem một đối tượng có phải là một thể hiện của lớp được chỉ định hay bất kỳ lớp con nào được kế thừa từ nó hay không. Nó cũng hỗ trợ kiểm tra một bộ lớp (ví dụ: `isinstance(value, (int, float))`), làm cho mã xác thực trở nên linh hoạt và mạnh mẽ hơn.
Đầu ra mã & thực thi
Tập lệnh này minh họa việc kiểm tra các loại biến bằng cả hai loại() và isinstance(), cho thấy sự khác biệt trong tính kế thừa.
value_int = 42
value_str = "hello"
# 1. Checking type using isinstance() (Recommended)
is_number = isinstance(value_int, int)
print(f"Is {value_int} an int? {is_number}")
# Checking against multiple possible types
is_num_or_str = isinstance(value_str, (int, float, str))
print(f"Is '{value_str}' int, float, or str? {is_num_or_str}")
# 2. Checking type using type() (For exact class matches)
print(f"Exact type of value_int: {type(value_int).__name__}")
print("Is value_int exactly an int?", type(value_int) is int)
# 3. Inheritance difference
class CustomList(list):
pass
my_list = CustomList([1, 2, 3])
print("\nInheritance testing:")
print("isinstance(my_list, list):", isinstance(my_list, list))
print("type(my_list) is list:", type(my_list) is list)Is 42 an int? True
Is 'hello' int, float, or str? True
Exact type of value_int: int
Is value_int exactly an int? True
Inheritance testing:
isinstance(my_list, list): True
type(my_list) is list: FalseTriển khai từng bước
- Sử dụng isinstance(variable, type_name) để kiểm tra kiểu chung (tuân theo tính kế thừa).
- Truyền một bộ các loại như isinstance(variable, (int, float)) để kiểm tra nhiều lớp.
- Chỉ sử dụng type(variable) là type_name khi bạn phải đảm bảo khớp lớp chính xác, bỏ qua các lớp con.
Câu hỏi thường gặp
Tại sao isinstance() được ưa thích hơn type()?
isinstance() hỗ trợ kế thừa đối tượng và đa hình. Nếu bạn phân lớp một loại có sẵn, isinstance() sẽ nhận dạng chính xác nó là một phiên bản của lớp cha, trong khi type() sẽ đánh giá là Sai.
Làm cách nào để kiểm tra xem một đối tượng có thể gọi được hay không (như hàm)?
Sử dụng hàm callable() tích hợp sẵn, hàm này trả về True nếu đối tượng có thể được gọi giống như một hàm.
Chủ đề liên quan
Tìm hiểu cách tạo một lớp trong Python. Nắm vững hàm tạo __init__, các phương thức phiên bản, từ khóa self và khởi tạo đối tượng.
Cách xử lý ngoại lệ trong PythonTìm hiểu cách xử lý các ngoại lệ trong Python bằng cách sử dụng các khối thử, ngoại trừ, khác và cuối cùng. Viết mã Python không có lỗi và chống lỗi.
Tài nguyên Python được đề xuất
Mở rộng kiến thức của bạn với các hướng dẫn tương tác, bảng ghi chú và so sánh mã có liên quan.
Gợi ý kiểu Python
Tìm hiểu cách viết gợi ý kiểu bằng Python. Cải thiện chất lượng mã, bật tính năng tự động hoàn thành và tận dụng mypy để phân tích mã tĩnh.
Bảng cheat chuyển đổi loại Python
Tìm hiểu các chuyển đổi loại ẩn và rõ ràng trong Python. Chuyển đổi giữa các chuỗi, số nguyên, số float, danh sách, bộ và từ điển.
Python vs TypeScript: Tập lệnh động và Web an toàn kiểu
So sánh Python và TypeScript. Tìm hiểu về hệ thống loại cấu trúc, siêu dữ liệu trang trí, kiểm tra trình biên dịch, thời gian chạy web và công cụ dành cho nhà phát triển.