Python 문서에 javadoc 사용하기


162

나는 현재 파이썬으로 시작하고 있으며 강력한 PHP 배경을 가지고 있으며 PHP javadoc에서는 문서 템플릿 으로 사용하는 습관을 들였습니다 .

궁금 해서요 javadoc로 그 자리가 docstring파이썬에서 문서를. 여기서 확립 된 컨벤션 및 / 또는 공식적인 길드 라인은 무엇입니까?

예를 들어 파이썬 마인드에 맞추기에는 너무 정교하거나 가능한 한 간결해야합니까?

"""
replaces template place holder with values

@param string timestamp     formatted date to display
@param string priority      priority number
@param string priority_name priority name
@param string message       message to display

@return string formatted string
"""

그리고 내가 너무 철저하다면 대신 이와 같은 것을 사용해야합니까 (대부분의 문서가 __doc__방법을 통해 인쇄되지 않는 경우 )?

# replaces template place holder with values
#    
# @param string timestamp     formatted date to display
# @param string priority      priority number
# @param string priority_name priority name
# @param string message       message to display
#    
# @return string formatted string

def format(self, timestamp = '', priority = '', priority_name = '', message = ''):
    """
    replaces template place holder with values
    """
    values = {'%timestamp%' : timestamp,
              '%priorityName%' : priority_name,
              '%priority%' : priority,
              '%message%' : message}

    return self.__pattern.format(**values)

6
Thera는 또한 초기 질문 에서 이것에 대한 더 많은 답변 입니다.
Alex Dupuy

답변:


227

일반 텍스트 / docstring 마크 업 형식 인 reStructuredText ( "reST"라고도 함) 형식을 살펴보고 Python 세계에서 가장 널리 사용되는 형식을 살펴보십시오 . 그리고 reStructuredText (예를 들어 Python 문서 자체에서 사용)에서 문서를 생성하는 도구 인 Sphinx를 확실히 살펴 봐야 합니다. Sphinx에는 코드의 문서 문자열에서 문서를 추출 할 수있는 가능성이 포함되어 있으며 ( sphinx.ext.autodoc 참조 ) 특정 규칙에 따라 reST 필드 목록을 인식 합니다 . 이것은 아마도 가장 인기있는 방법이 될 것입니다.

귀하의 예는 다음과 같습니다.

"""Replaces template placeholder with values.

:param timestamp: formatted date to display
:param priority: priority number
:param priority_name: priority name
:param message: message to display
:returns: formatted string
"""

또는 유형 정보로 확장 :

"""Replaces template placeholder with values.

:param timestamp: formatted date to display
:type timestamp: str or unicode
:param priority: priority number
:type priority: str or unicode
:param priority_name: priority name
:type priority_name: str or unicode
:param message: message to display
:type message: str or unicode
:returns: formatted string
:rtype: str or unicode
"""

7
긴 설명을 위해 줄을 끊어야 할 경우 어떻게해야합니까? 어떻게 보일까요?
Skylar Saveland

6
reStructuredText 참조 및 특히 필드 목록을 참조하십시오. docutils.sourceforge.net/docs/ref/rst/…
Steven

6
여기에 나오는 문구가 PEP 257을 준수하지 않는 점에 유의하십시오 . Replace template place holder with values.대신에 있어야합니다 replaces template place holder with values.-문장, 시작시 대문자 및 끝 (.)을 확인하십시오.
kratenko

1
1.3 버전부터 Sphinx는 sphinx.ext.napoleon확장 기능을 통해 조금 더 멋진 형식을 지원합니다 .
Petri

3
": param ____ :"및 ": returns :"와 같은 특수 문서 문자열을 지정하는 가장 좋은 문서를 알려주시겠습니까? 이러한 문서는 현재 찾기가 쉽지 않습니다.
krumpelstiltskin

75

Google Python 스타일 가이드를 따르십시오 . Sphinx는 또한 Sphinx 1.3과 함께 제공되는 Napolean 확장을 사용하여이 형식을 구문 분석 할 수 있습니다 ( PEP257 과도 호환 ).

def func(arg1, arg2):
    """Summary line.

    Extended description of function.

    Args:
        arg1 (int): Description of arg1
        arg2 (str): Description of arg2

    Returns:
        bool: Description of return value

    """
    return True

위에 링크 된 나폴레옹 문서에서 가져온 예.

모든 유형의 docstring에 대한 포괄적 인 예는 여기에 있습니다 .


20
docstrings를 읽는 모든 인간을 위해
Waylon Flinn

1
Google Python 스타일 가이드 링크 업데이트
confused00

@ confused00 내 메소드가 객체 배열을 반환한다는 것을 어떻게 문서화 할 수 있습니까?
Cito

1
이제 혼란 스러워요! 인수 또는 매개 변수? stackoverflow.com/questions/1788923/parameter-vs-argument
shuva

25

파이썬 문서 문자열의 표준은 Python Enhancement Proposal 257에 설명되어 있습니다.

귀하의 방법에 대한 적절한 의견은 다음과 같습니다

def format(...):
    """Return timestamp string with place holders replaced with values.

    Keyword arguments:
    timestamp     -- the format string (default '')
    priority      -- priority number (default '')
    priority_name -- priority name (default '')
    message       -- message to display (default '')
    """

17
PEP257은 인수 부분의 실제 형식에 대해서는 아무 것도 알려주지 않습니다. 그것은 단지 쓰여 져야한다고 말하고 예제를 제공합니다. 그러나 이것은 단지 예일뿐입니다. 따라서 PEP257을 중단하지 않고 스핑크스에서 구문 분석 할 수있는 형식을 사용하므로 스핑크스 규칙을 사용하는 것이 좋습니다.
vaab

7
위에 제시된 첫 번째 문서는 추악하고 인간을위한 많은 중복 정보가 있습니다. 차라리 소스 코드 를 먼저 파싱하지 않고 읽을 수있는 컨벤션을 사용하고 싶습니다
confused00

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.