0
0
Lập trình
Sơn Tùng Lê
Sơn Tùng Lê103931498422911686980

Hiểu về tính đúng, sai và ý nghĩa của sự trống rỗng trong Python

Đăng vào 7 tháng trước

• 4 phút đọc

Hiểu về tính đúng, sai và ý nghĩa của sự trống rỗng trong Python

Giới thiệu

Trong Python, khái niệm về tính đúng và sai không chỉ đơn thuần là True và False. Thực tế, nó phản ánh ý nghĩa của đối tượng trong ngữ cảnh logic. Bài viết này sẽ giúp bạn hiểu rõ hơn về cách thức mà Python đánh giá tính đúng của các đối tượng thông qua phương thức __bool__ và cách thiết kế của nó.

Phần 1: Câu Hỏi của Trình Thông Dịch

Khi Python đánh giá một đối tượng trong ngữ cảnh boolean, ví dụ như trong một câu lệnh if:

python Copy
if some_object:
    ...

Python sẽ thực hiện theo trình tự sau:

  1. Gọi phương thức some_object.__bool__() nếu nó được định nghĩa.
  2. Nếu không có, Python sẽ gọi some_object.__len__():
    • Nếu độ dài bằng 0, coi như là False.
    • Ngược lại, coi như là True.
  3. Nếu cả hai phương thức đều không được định nghĩa, mặc định sẽ là True.

Như vậy, ngay cả một lớp tùy chỉnh cũng có thể định nghĩa cách thức đánh giá tính đúng của nó.

Phần 2: Tạo Ra Tính Đúng của Chúng Ta

Hãy cùng xây dựng một đối tượng đơn giản: một cuộn giấy chứa tri thức.

python Copy
class Scroll:
    def __init__(self, text):
        self.text = text

Bây giờ, hãy kiểm tra tính đúng của nó:

python Copy
s = Scroll("Đừng tìm kiếm sự thật, chỉ cần ngừng trân trọng những ý kiến.")

if s:
    print("Cuộn giấy đang phát biểu.")
else:
    print("Cuộn giấy im lặng.")

Mệnh đề trên sẽ luôn in ra "Cuộn giấy đang phát biểu.", vì Scroll không có phương thức __bool__ hay __len__. Python mặc định coi tất cả các đối tượng là True trừ khi được thông báo khác.

Bây giờ, hãy cho nó một giọng nói của sự thật:

python Copy
class Scroll:
    def __init__(self, text):
        self.text = text

    def __bool__(self):
        return bool(self.text.strip())

Lúc này, hãy quan sát:

python Copy
Scroll(" ") # Hành xử như False
Scroll("Hòa bình") # Hành xử như True

Chúng ta đã dạy cho đối tượng của mình cách thể hiện sự hiện diện của nó.

Phần 3: Sử Dụng __len__ Khi Cần

Nếu __bool__ không được định nghĩa, Python sẽ tìm kiếm __len__.

python Copy
class WisdomBasket:
    def __init__(self):
        self.sayings = []

    def __len__(self):
        return len(self.sayings)

Bây giờ:

python Copy
basket = WisdomBasket()
if basket:
    print("Có tri thức.")
else:
    print("Giỏ rỗng.")

Điều này rất hữu ích khi đối tượng của bạn đại diện cho một bộ sưu tập và tính đúng được gắn liền với nội dung của nó.

Phần 4: Thiết Kế Tính Đúng Như Một Quyết Định

Tại sao điều này lại quan trọng?

Bởi vì trong mã thực tế, tính đúng thường mang ý nghĩa. Hãy xem xét ví dụ:

python Copy
if response:
    ...

Response nên có ý nghĩa gì?

  • Yêu cầu HTTP có thành công không?
  • Nội dung phản hồi có chứa dữ liệu hữu ích không?
  • Trạng thái có phải là 200 không?

Bạn quyết định những gì __bool__ nên truyền đạt.

Khi thiết kế API, thư viện nội bộ hoặc các lớp do người dùng định nghĩa, một định nghĩa rõ ràng về tính đúng có thể giảm thiểu mã thừa và làm cho ý định trở nên rõ ràng.

Phần 5: Lưu Ý về Sự Mơ Hồ

Tính đúng nên rõ ràng và dễ hiểu.

Nếu đối tượng của bạn đại diện cho một cấu hình, một yêu cầu hoặc một tài nguyên, hãy xem xét ý nghĩa của việc trở thành “truthy”. Tránh sự khéo léo khiến logic trở nên khó hiểu:

python Copy
if config:
    # Điều này nghĩa là gì?

Tốt hơn là hãy tài liệu hóa, hoặc tránh sử dụng tính đúng hoàn toàn nếu ngữ nghĩa không rõ ràng.

Kết Luận

Bậc thầy không nói: "Danh sách rỗng là False."
Ngài đã nói: "Không phải là sai. Chỉ là rỗng."

Trong Python, tính đúng không phải là cố định. Nó là một cái bóng được tạo ra bởi thiết kế của bạn. Bạn có thể chọn cách mà các đối tượng của bạn phản ánh ánh sáng, hoặc sự thiếu vắng của nó.


Nếu bạn thích bài viết này, hãy cân nhắc việc đăng ký hoặc chia sẻ nó với bạn bè của bạn:

Python Koans | Vivis Dev | Substack

Các bài học Python được bọc trong các koan. Những câu đố nhỏ, những chân lý sâu sắc. Không phải là chuỗi hướng dẫn thông thường của bạn. Nhấp để đọc Python Koans, bởi Vivis Dev, một ấn phẩm Substack với hàng trăm người đăng ký.

pythonkoans.substack.com

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào