2010-04-04 5 views
3

docstring의 반복적 인 내용을 처리하는 좋은 방법은 무엇입니까? docstring에서 설명해야하는 '표준'인수를 사용하는 많은 함수가 있지만, 유지 보수 및 업데이트가 훨씬 쉬우므로 docstring의 관련 부분을 한 번만 작성하면 좋을 것입니다. 내가 help(test)을 수행 할 때 내가 문서화 문자열이 표시되지 않기 때문에,docstrings의 반복적 인 내용

arg_a = "a: a very common argument" 

def test(a): 
    ''' 
    Arguments: 
    %s 
    ''' % arg_a 
    pass 

그러나이 작동하지 않습니다 나는 순진하게도 다음을 시도했다. 이것을 할 수있는 좋은 방법이 있습니까?

+2

무료로 추출하려고하는 청결한 추상화가있는 것처럼 들립니다. 많은 기능들이 무엇이고 표준 주장은 무엇입니까? –

답변

4

다른 답변은 함수 개체의 __doc__ 멤버를 변경해야한다고 말합니다. 이를 수행하는 좋은 방법은 문서화 문자열에 대한 형식을 수행하는 데코레이터를 사용하는 것입니다.

def fixdocstring(func): 
    func.__doc__ = func.__doc__.replace('<arg_a>', 'a: a very common argument') 
    #(This is just an example, other string formatting methods can be used as well.) 
    return func 

@fixdocstring 
def test(a): 
    ''' 
    Arguments: 
    <arg_a> 
    '''' 
    pass 
+0

+1 데코레이터를 사용하려면 교체되는 물건의 트위터가 필요할 수 있습니다. 그러면 코드를 탐색 할 때 무엇이 ​​삽입되었는지를 확인해야합니다. –

+0

나는 데코레이터를 사용하는 것을 좋아한다. 그러나 새 줄에 새 줄을 삽입하면 (예 : " 'a : very \ ncommon argument'"그러면 도움말 테스트를 입력 할 때 들여 쓰기 문제가있는 것처럼 보입니다 (첫 번째 두 줄은 너무 많이 들여 쓰여집니다). 왜이게 될지에 대한 어떤 생각? – astrofrog

+0

@Morgoth : 원본 docstring에 이미 들여 쓰기가 있기 때문입니다. 따라서 인수를 추가하면 얻을 수 있습니다. ""__ 인수 : \ n __ 매우 \ n 일반적인 인수 ". 나는 당신이 수동으로 argst에 대한 당신의 docstring에 들여 쓰기를 추가 할 수 있다고 가정하지만 다르게 들여 쓰기되는 함수들에서는 올바르게 작동하지 않을 것이다. 더 완전하지만 복잡한 해결책은 fixdocstring 함수가 원래의 들여 쓰기를 결정하고 자동으로 대체 문자열에 추가하는 것입니다. – interjay

3

__doc__는 대부분의 사용자 정의 형식에 할당 할 수 있습니다 :

arg_a = "a: a very common argument" 

def test(a): 
    pass 

test.__doc__ = ''' 
    Arguments: 
    %s 
    ''' % arg_a 
3

은 (이그나시오 알 수 있듯이 명시 적으로 __doc__를 재 할당없이 적어도) 내가 아는 한이 작업을 수행 할 확실한 방법이 없습니다.

그러나 이것은 끔찍한 일이라고 생각합니다. 다음을 고려하십시오 :

코드를 탐색하면서 파일의 300 번째 줄에서이 문서 문자열을 읽으면 어떻게됩니까? 당신은 정말로 내가 가야 할 검색 검색을 원하십니까?

관련 문제