2011-08-08 2 views
2

사람들이 None을 사용하여 일부 메소드를 호출 할 수있게하려면 메소드 정의시 sentinel object을 사용해야합니다.센티넬 객체에 기본 매개 변수가있는 Sphinx python 메소드로 문서화 하시겠습니까?

_sentinel = object() 
def foo(param1=_sentinel): 
    ... 

이것은 당신이 foo(param1=None)를 호출하고 foo() 같은 통화의 차이를 만들 수 있도록 허용합니다.

문제는 스핑크스는 방법을 문서화 않을 때

mymodule.foo(param1=<object object at 0x108c1a520>) 

어떻게 스핑크스는 이러한 기능을위한 사용자 친화적 인 출력을 가지고 설득 할 수처럼 작성할 것입니다?

참고로, 센티널 방식을 사용하는 3-4 개의 매개 변수가있는 경우 문서가 어떻게 보이는지 상상해보십시오.

답변

0

나는 스핑크스가 기능 밖에있는 객체를 생성하는 센티넬 (sentinel)을 가진 한 더 "친숙하다"고 설득하는 것이 가능하다고 생각하지 않습니다. Sphinx 'autodoc extension imports the module, 이는 모듈 수준 코드가 실행됨을 의미합니다.

정말 이와 같은 것을 사용할 수 없습니까?

def foo(param1=None): 
    if param1 == None: 
     param1 = whatever you want... 
    else: 
     ... 
+2

감시 기능 밖에 일회성 목적은 그래서 소린은 당신이 제안하는 것을 정말로 사용할 수 없다고 생각합니다. –

1

이것은 예 autodoc 지시자 수동 지정 함수 서명에 의해 처리 될 수있다 :이 함수는 일반적인 경우로서 없음 값을 처리 할 수 ​​있도록

.. automodule:: pymorphy.contrib.tokenizers 

    .. autofunction:: extract_tokens(foo, bar) 

    .. autofunction:: extract_words 
+0

예, 작동합니다 : +1. 왜 내가 그걸 생각하지 않았을까? :-) http://stackoverflow.com/questions/5365684 – mzjn

관련 문제