2 คะแนน โดย GN⁺ 2024-07-26 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • 🙀 WAT Inspector

    • เครื่องมือสำหรับตรวจสอบอ็อบเจ็กต์ Python แบบเจาะลึก
    • WAT เป็นเครื่องมือตรวจสอบที่ทรงพลังสำหรับสำรวจอ็อบเจ็กต์ที่ไม่ทราบข้อมูลในขณะรันไทม์
    • "Wat" เป็นคำดัดแปลงมาจากคำภาษาอังกฤษ "what" ที่มักใช้เพื่อแสดงความสับสนหรือความไม่พอใจ
    • สามารถรัน wat / object ในคอนโซล Python เพื่อตรวจสอบ ชนิด, ค่าที่จัดรูปแบบ, ตัวแปร, เมธอด, ชนิดแม่, signature, documentation, ซอร์สโค้ด และอื่น ๆ ของอ็อบเจ็กต์ได้
    • สามารถใช้ไวยากรณ์ wat(object) ได้เช่นกัน
  • Import

    • Insta-Load

      • สามารถโหลดเครื่องมือตรวจสอบนี้อย่างรวดเร็วในเซสชันเดียวกันได้โดยไม่ต้องติดตั้ง
      • วางสไนเป็ตต่อไปนี้ลงใน Python interpreter:
        import base64, zlib
        code = b'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'
        exec(zlib.decompress(base64.b64decode(code)).decode(), globals())
        
      • ตอนนี้สามารถใช้อ็อบเจ็กต์ wat ได้แล้ว
      • คำเตือน: ควรตรวจสอบสิ่งที่จะรันก่อนที่จะรันสไนเป็ต Insta-Load
        • ดูเนื้อหาของโค้ดที่ถอดออกมาก่อนได้:
          print(zlib.decompress(base64.b64decode(code)).decode())
          
        • วางเนื้อหาของ inspection.py ลงใน interpreter
        • ติดตั้งแพ็กเกจด้วย pip และตรวจสอบโค้ด
    • Install with pip

      • ติดตั้งแพ็กเกจ wat-inspector และนำเข้าเครื่องมือตรวจสอบจากโมดูล wat:
        pip install wat-inspector
        import wat
        
  • Usage & modifiers

    • อ็อบเจ็กต์ wat สามารถตรวจสอบอ็อบเจ็กต์ได้อย่างรวดเร็วด้วยตัวดำเนินการ / ที่พิมพ์ได้เร็วโดยไม่ต้องมีวงเล็บ
    • wat / object เหมือนกับ wat(object)
    • สามารถเรียก wat.modifiers / object (หรือ wat.modifiers(object)) ด้วยการใช้ modifier ต่อไปนี้:
      • .short หรือ .s: ซ่อนแอตทริบิวต์ (ตัวแปรและเมธอด)
      • .long: แสดงค่าแบบไม่ย่อและ documentation
      • .dunder: แสดงแอตทริบิวต์ dunder
      • .code: แสดงซอร์สโค้ดของฟังก์ชัน เมธอด หรือคลาส
      • .nodocs: ซ่อน documentation ของฟังก์ชันและคลาส
      • .all: รวมข้อมูลที่มีทั้งหมด
    • สามารถเชื่อม modifier ต่อกันได้ เช่น wat.long.dunder.nodocs / object
    • เรียก wat.locals หรือ wat() เพื่อตรวจสอบตัวแปร locals()
    • เรียก wat.globals เพื่อตรวจสอบตัวแปร globals()
    • พิมพ์ wat ใน interpreter เพื่อเรียนรู้เพิ่มเติมเกี่ยวกับอ็อบเจ็กต์นี้
  • Use Cases Examples

    • Determine type

      • ในภาษาแบบ dynamic typing อย่าง Python การระบุชนิดของอ็อบเจ็กต์อาจทำได้ยาก
      • WAT Inspector สามารถช่วยได้ด้วยการแสดงชื่อชนิดและโมดูลของอ็อบเจ็กต์
        >>> wat.short / (1,)
        value: (1,)
        type: tuple
        len: 1
        
        >>>
        

1 ความคิดเห็น

 
GN⁺ 2024-07-26
ความคิดเห็นใน Hacker News
  • Waaat :D เครื่องมือนี้ดีมาก เคยใช้ python-ls มาก่อนแต่ตอนนี้ไม่มีการดูแลแล้ว ส่วนใหญ่ใช้ snoop กับ pdbpp และคงจะดีถ้าเพิ่มวิดเจ็ต ipy ให้กับ wat

    • เพิ่งได้รู้จักเทคนิคแฮ็ก exec แบบ base64 เป็นครั้งแรก และตั้งใจว่าจะใช้ต่อไป
  • เครื่องมือนี้ดูน่าสนุกดี ใน Python ใช้ dir บ่อยมาก และบางครั้งก็มีประโยชน์กว่าคู่มือทางการ

    • แปลกใจที่ไม่มีนวัตกรรมและเครื่องมือใหม่ ๆ สำหรับ interactive shell ของ Python มากกว่านี้
  • เครื่องมือประเภทนี้มีประโยชน์

    • เมื่อ 20 ปีก่อนเคยเขียน object introspector สำหรับ Zope
    • ตอนนี้ใช้ devtools ทุกวัน และใช้ icecream กับ q เป็นครั้งคราว กำลังจะลอง wat ดู
  • ถ้าเพิ่มโค้ดต่อไปนี้ลงในไฟล์ $PYTHONSTARTUP ก็จะเลี่ยงการ import ที่ยุ่งยากได้

    try:
       from wat import wat
    except ImportError:
       pass
    
  • wat ดูเหมือน icecream เวอร์ชันที่เท่มาก

  • โปรเจกต์ wat เจ๋งมาก แต่ก็น่าแปลกที่ไม่มีวิธีใช้ง่าย ๆ แบบ import wat

    • อาจช่วยชวนให้ผู้ใช้ลอง wat/wat ได้
  • จุดอ่อนที่สุดของ Python คือไม่มีฟังก์ชันที่แสดงได้ชัดเจนว่าตัวแปรมีหน้าตาอย่างไร

    • var_dump ของ PHP มีประโยชน์มาก และ wat ก็ดูเหมือนจะเป็นหนึ่งในเครื่องมือที่ดีที่สุด
  • โมดูล wat ใช้โมดูล inspect ในไลบรารีมาตรฐานของ Python เพื่อให้ฟังก์ชันการทำงานนี้

    • บรรทัดที่ 2 ของไฟล์ inspection.py มี import inspect as std_inspect
  • เครื่องมือนี้คงช่วยได้มากตอนกำลังเรียน Python

    • การได้เห็นว่าเกิดอะไรขึ้นภายในเป็นเรื่องสำคัญสำหรับการเรียนรู้ภาษา
    • การดีบัก Python แบบพื้นฐานน่าผิดหวัง
    • เลยไปติดตั้ง pry และกลายเป็นแฟน Ruby แต่ wat อาจทำให้อยากกลับมาลองอีกครั้ง
  • สงสัยว่าใน Lua มีเครื่องมือแบบนี้ไหม

    • Lua ไม่มีความสามารถ introspection แบบ built-in เหมือน help() ของ Python