มา Document สำหรับ Class Module ใน Python เพื่อใช้งานในทีมกัน ด้วย pdoc

หลายท่าน น่าจะเคยเจอปัญหา ในการต้องมาอธิบายให้เพื่อนร่วมทีมฟัง ถึงวิธีใช้งาน บาง Function หรือ Class Module ที่เราหรือเพื่อนร่วมทีมเขียน Code ไว้ แม้บางครั้งเราจะเขียน String Doc (__doc__ หรือ docstring) ใน Python ไว้แล้วก็ตาม ดังภาพตัวอย่างด้านบน

ก็มักจะเจอปัญหา เพื่อนร่วมทีมยังหาวิธีใช้งานยาก หรือไม่รู้ว่ามี Function หรือ Class นั้นๆอยู่ หรือเจอปัญหา เมื่อมีเพื่อร่วมทีม เข้ามาใหม่ ก็ต้องมานั่งอธิบาย วิธีใช้งานกันเป็นวันๆ หรือ 2-3 วันเลยทีเดี่ยว ซึ่งเอาจริงๆแล้ว สิ่งที่เราอธิบายไปนั้น แน่นอนว่า เพื่อนร่วมทีมเรา มักจะจำกันไม่ค่อยได้

จะดีกว่าไหม ถ้าเรามี HTML Document แบบนี้

https://back-dev-docs.web.app/

เอาละมาเริ่มกันแบบจริงจังชักที สมุดว่าเรามี โครงสร้าง โปรเจ็คประมาณนี้

.
└── project/
├── docs/
│ ├── …
│ ├── index.html
│ └── …
├── shared_library_python/
│ └── python/
│ ├── …
│ ├── Connection.py
│ ├── CRUDModel.py
│ ├── EnvModel.py
│ └── …
└── document.py

และมีเขียน String Doc (__doc__ หรือ docstring) ใน Python ไว้แล้ว ดังภาพ

เราจะสามารถใช้ Code ต่อไปนี้ในการสร้าง HTML Document ได้ทันที

pip install pdoc
#!/usr/bin/env python

import glob
import json
import os
from datetime import datetime

vvvvv = datetime.now().strftime('%Y-%m-%d')
"""
Generate the code documentation, using pydoc.
"""

docs_folder = f"docs_{vvvvv}"
ignored_files = ["MongoDBEngine.py"]
module_list = []
for dirname in ['shared_library_python/python/']:
    flist = glob.glob(f'{dirname}/*.py')
    for fname in flist:
        if '__init__' not in fname and fname not in ignored_files and "EX_" not in fname:
            module_list.append(fname)
            bname = os.path.splitext(os.path.basename(fname))[0].lower()


    os.system(f'python3.8 -m pdoc -d google -o {docs_folder} -e module={json.dumps(module_list)}')

ตัวอย่าง การเขียน String Doc (__doc__ หรือ docstring) ใน Python

ลองสร้างไฟล์ demo.py และใส่ Code ด้านล่างลงไป จากนั้น เรียกใช้คำสั่งต่อไปนี้ดูครับ

pdoc demo.py

ไฟล์ demo.py

"""
A small `pdoc` example.
"""

class Dog:
    """🐕"""
    name: str
    """The name of our dog."""
    friends: list["Dog"]
    """The friends of our dog."""

    def __init__(self, name: str):
        """Make a Dog without any friends (yet)."""
        self.name = name
        self.friends = []

    def bark(self, loud: bool = True):
        """*woof*"""

ดูการใช้งานเพิ่มเติมได้ที่เว็บไชต์

https://pdoc.dev/

Read more

อีซูซุ D-Max EV: ก้าวสำคัญสู่ยุคกระบะไฟฟ้าจากฐานการผลิตไทย

อีซูซุ D-Max EV: ก้าวสำคัญสู่ยุคกระบะไฟฟ้าจากฐานการผลิตไทย

ค้นพบ Isuzu D-Max EV กระบะไฟฟ้า 100% รุ่นแรกของอีซูซุ ที่ผลิตในไทย! พร้อมราคา, สมรรถนะ, แบตเตอรี่, และเทคโนโลยีสุดล้ำ. ก้าวสำคัญสู่โลก EV.

By ทีมงาน devdog
ปาแลร์โม่: ตำนานนกฟีนิกซ์สีชมพู-ดำ สู่การกลับคืนเซเรียอา!

ปาแลร์โม่: ตำนานนกฟีนิกซ์สีชมพู-ดำ สู่การกลับคืนเซเรียอา!

ค้นพบเรื่องราวสุดทึ่งของสโมสรปาแลร์โม่ จากการล้มละลายสู่การลุ้นขึ้นเซเรียอา ด้วยการลงทุนจาก City Football Group และพลังของดาวรุ่ง Niccolò Pierozzi

By ทีมงาน devdog
Samsung Galaxy Z TriFold: ปิดฉากสมาร์ตโฟนจอพับสองทบ หลังเปิดตัวเพียง 3 เดือน – สาเหตุที่แท้จริงคืออะไร?

Samsung Galaxy Z TriFold: ปิดฉากสมาร์ตโฟนจอพับสองทบ หลังเปิดตัวเพียง 3 เดือน – สาเหตุที่แท้จริงคืออะไร?

Samsung Galaxy Z TriFold สมาร์ตโฟนจอพับสองทบสุดล้ำ ปิดฉากลงอย่างรวดเร็วหลังเปิดตัวเพียง 3 เดือน! เจาะลึกเบื้องหลังการตัดสินใจจากซัมซุง

By ทีมงาน devdog
ปิ่นอนงค์: ละครรีเมคฟอร์มปัง "พรีม-เต้ย" คู่จิ้นเคมีใหม่ที่แฟนละครห้ามพลาด!

ปิ่นอนงค์: ละครรีเมคฟอร์มปัง "พรีม-เต้ย" คู่จิ้นเคมีใหม่ที่แฟนละครห้ามพลาด!

สำรวจความปังของ "ปิ่นอนงค์" ละครรีเมคช่อง 3 ที่ "พรีม รณิดา" และ "เต้ย พงศกร" พลิกบทบาทจนเรตติ้งพุ่งสูง พร้อมเผยเบื้องหลังและความทุ่มเทที่ทำให้ละครเรื่องนี้ขึ้นแท่นขวัญใจมหาชน.

By ทีมงาน devdog