Trong thế giới lập trình hướng đối tượng với Python, việc kiểm tra quan hệ giữa các lớp là một thao tác thường gặp. Python cung cấp hai hàm hữu ích cho mục đích này: issubclass
và isinstance
. Mặc dù thoạt nhìn có vẻ tương đồng, hai hàm này phục vụ các mục đích khác nhau và hiểu rõ sự khác biệt giữa chúng là rất quan trọng để viết mã Python hiệu quả và chính xác.
issubclass: Kiểm tra quan hệ kế thừa giữa các lớp
Hàm issubclass(class, classinfo)
được sử dụng để 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. Nói cách khác, nó kiểm tra xem một lớp có kế thừa trực tiếp hoặc gián tiếp từ một lớp khác hay không.
Cú pháp:
issubclass(class, classinfo)
Tham số:
class
: Lớp cần kiểm tra.classinfo
: Có thể là một lớp hoặc một tuple các lớp.
Giá trị trả về:
- Trả về
True
nếuclass
là lớp con củaclassinfo
. - Trả về
False
nếuclass
không phải là lớp con củaclassinfo
.
Ví dụ:
class DongVat:
pass
class Thu(DongVat):
pass
class Cho(Thu):
pass
print(issubclass(Cho, DongVat)) # Output: True
print(issubclass(Thu, (DongVat, int))) # Output: True
print(issubclass(DongVat, Cho)) # Output: False
Ví dụ về issubclass trong Python
isinstance: Kiểm tra kiểu của một đối tượng
Hàm isinstance(object, classinfo)
kiểm tra xem một đối tượng có phải là thể hiện của một lớp cụ thể hoặc bất kỳ lớp con nào của lớp đó hay không.
Cú pháp:
isinstance(object, classinfo)
Tham số:
object
: Đối tượng cần kiểm tra.classinfo
: Có thể là một lớp hoặc một tuple các lớp.
Giá trị trả về:
- Trả về
True
nếuobject
là thể hiện củaclassinfo
hoặc bất kỳ lớp con nào củaclassinfo
. - Trả về
False
nếuobject
không phải là thể hiện củaclassinfo
hoặc bất kỳ lớp con nào củaclassinfo
.
Ví dụ:
class DongVat:
pass
class Thu(DongVat):
pass
con_cho = Cho()
print(isinstance(con_cho, Cho)) # Output: True
print(isinstance(con_cho, DongVat)) # Output: True
print(isinstance("Hello", str)) # Output: True
print(isinstance(123, int)) # Output: True
print(isinstance(con_cho, int)) # Output: False
Ví dụ về isinstance trong Python
So sánh issubclass và isinstance
Đặc điểm | issubclass | isinstance |
---|---|---|
Mục đích | Kiểm tra quan hệ kế thừa giữa các lớp | Kiểm tra kiểu của một đối tượng |
Đối số | Lớp, Tuple các lớp | Đối tượng, Lớp, Tuple các lớp |
Kết quả | True/False | True/False |
Khi nào nên sử dụng issubclass và isinstance?
-
Sử dụng
issubclass
khi bạn cần kiểm tra mối quan hệ kế thừa giữa các lớp, ví dụ như khi bạn đang viết một hàm nhận vào một lớp làm tham số và bạn cần đảm bảo rằng lớp đó kế thừa từ một lớp cơ sở cụ thể. -
Sử dụng
isinstance
khi bạn cần kiểm tra kiểu của một đối tượng, ví dụ như khi bạn đang viết một hàm nhận vào một đối tượng làm tham số và bạn cần thực hiện các thao tác khác nhau tùy thuộc vào kiểu của đối tượng đó.
Kết luận
issubclass
và isinstance
là hai hàm mạnh mẽ trong Python hỗ trợ lập trình hướng đối tượng. Hiểu rõ sự khác biệt giữa chúng là chìa khóa để viết mã Python rõ ràng, chính xác và dễ bảo trì. Bằng cách sử dụng đúng cách hai hàm này, bạn có thể tận dụng tối đa tính năng kế thừa và đa hình trong Python.