2 điểm bởi GN⁺ 2024-07-26 | 1 bình luận | Chia sẻ qua WhatsApp
  • 🙀 WAT Inspector

    • Công cụ kiểm tra sâu các đối tượng Python
    • WAT là một công cụ kiểm tra mạnh mẽ có thể khảo sát các đối tượng chưa biết ở thời gian chạy
    • "Wat" là một biến thể của từ tiếng Anh "what", thường được dùng để thể hiện sự bối rối hoặc khó chịu
    • Có thể chạy wat / object trong console Python để khảo sát kiểu, giá trị được định dạng, biến, phương thức, kiểu cha, chữ ký, tài liệu, mã nguồn và nhiều thông tin khác của đối tượng
    • Cũng có thể dùng cú pháp wat(object)
  • Import

    • Insta-Load

      • Có thể nhanh chóng nạp công cụ kiểm tra này trong cùng một phiên mà không cần cài đặt
      • Dán đoạn mã sau vào trình thông dịch Python:
        import base64, zlib
        code = b'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'
        exec(zlib.decompress(base64.b64decode(code)).decode(), globals())
        
      • Giờ có thể dùng đối tượng wat
      • Cảnh báo: nên kiểm tra nội dung sẽ được thực thi trước khi chạy đoạn mã Insta-Load
        • Xem trước nội dung của mã đã giải nén:
          print(zlib.decompress(base64.b64decode(code)).decode())
          
        • Dán nội dung của inspection.py vào trình thông dịch
        • Cài gói bằng pip và rà soát mã nguồn
    • Install with pip

      • Cài gói wat-inspector và import công cụ kiểm tra từ mô-đun wat:
        pip install wat-inspector
        import wat
        
  • Usage & modifiers

    • Đối tượng wat có thể nhanh chóng kiểm tra đối tượng bằng toán tử /, cho phép nhập nhanh mà không cần dấu ngoặc
    • wat / object tương đương với wat(object)
    • Có thể gọi wat.modifiers / object (hoặc wat.modifiers(object)) với các modifier sau:
      • .short hoặc .s: ẩn thuộc tính (biến và phương thức)
      • .long: hiển thị giá trị đầy đủ không rút gọn và tài liệu
      • .dunder: hiển thị các thuộc tính dunder
      • .code: hiển thị mã nguồn của hàm, phương thức hoặc lớp
      • .nodocs: ẩn tài liệu của hàm và lớp
      • .all: bao gồm mọi thông tin khả dụng
    • Có thể nối chuỗi các modifier, ví dụ: wat.long.dunder.nodocs / object
    • Gọi wat.locals hoặc wat() để kiểm tra các biến locals()
    • Gọi wat.globals để kiểm tra các biến globals()
    • Nhập wat trong trình thông dịch để tìm hiểu thêm về đối tượng này
  • Use Cases Examples

    • Determine type

      • Trong các ngôn ngữ gõ kiểu động như Python, việc xác định kiểu của một đối tượng có thể khó khăn
      • WAT Inspector có thể giúp bằng cách hiển thị tên kiểu và mô-đun của đối tượng
        >>> wat.short / (1,)
        value: (1,)
        type: tuple
        len: 1
        
        >>>
        

1 bình luận

 
GN⁺ 2024-07-26
Bình luận trên Hacker News
  • Waaat :D. Công cụ này thực sự rất hay. Trước đây tôi từng dùng python-ls nhưng nó აღარ được duy trì nữa. Tôi chủ yếu dùng snoop và pdbpp, và sẽ rất tuyệt nếu wat có thêm widget ipy

    • Tôi mới biết đến mẹo hack base64 exec, và dự định sẽ dùng nó về sau
  • Công cụ này trông khá thú vị. Tôi thường xuyên dùng dir trong Python, và đôi khi nó còn hữu ích hơn cả tài liệu chính thức

    • Tôi ngạc nhiên vì không có nhiều đổi mới và công cụ mới hơn cho shell tương tác của Python
  • Loại công cụ này rất hữu ích

    • Tôi đã viết một object introspector cho Zope cách đây 20 năm
    • Hiện tại tôi dùng devtools hằng ngày, thỉnh thoảng dùng icecream và q. Tôi sẽ thử wat
  • Nếu thêm đoạn mã sau vào file $PYTHONSTARTUP thì có thể tránh được việc import phiền phức

    try:
       from wat import wat
    except ImportError:
       pass
    
  • wat trông giống như một phiên bản ngầu hơn của icecream

  • Dự án wat rất tuyệt, nên thật ngạc nhiên khi nó không cung cấp cách dùng đơn giản như import wat

    • Điều đó có thể khuyến khích người dùng thử wat/wat
  • Điểm yếu lớn nhất của Python là không có một hàm nào cho thấy chính xác biến trông như thế nào

    • var_dump của PHP rất hữu ích. wat cũng có vẻ là một trong những công cụ tốt nhất
  • Mô-đun wat cung cấp tính năng này bằng cách sử dụng mô-đun inspect trong thư viện chuẩn của Python

    • Ở dòng thứ 2 của file inspection.py có import inspect as std_inspect
  • Công cụ này hẳn đã giúp ích rất nhiều khi tôi học Python

    • Để học một ngôn ngữ, việc nhìn thấy điều gì đang diễn ra bên trong là rất quan trọng
    • Khả năng debug mặc định của Python gây thất vọng
    • Thay vào đó tôi đã cài pry và trở thành fan của Ruby, nhưng nhờ wat mà có thể tôi sẽ thử lại
  • Tôi tự hỏi liệu Lua có công cụ như thế này không

    • Lua không có tính năng introspection tích hợp như help() của Python