2011-05-09 8 views
8

저는 nxt-python이라는 python 패키지를 유지 관리하는 데 도움을줍니다. 메타 클래스를 사용하여 컨트롤 객체의 메서드를 정의합니다. 여기에 사용 가능한 기능을 정의하는 방법은 다음과 같습니다메서드의 docstring을 명시 적으로 설정합니다.

class _Meta(type): 
    'Metaclass which adds one method for each telegram opcode' 

    def __init__(cls, name, bases, dict): 
     super(_Meta, cls).__init__(name, bases, dict) 
     for opcode in OPCODES: 
      poll_func, parse_func = OPCODES[opcode] 
      m = _make_poller(opcode, poll_func, parse_func) 
      setattr(cls, poll_func.__name__, m) 

내가이 추가 이러한 각 방법에 다른 문서화 문자열을 추가 할 수 있어야합니다. m은 _make_poller()에 의해 리턴 된 메소드이다. 어떤 아이디어? docstring 변경시 파이썬 제한을 해결할 수있는 방법이 있습니까? 일반 함수의

+0

또한'_Meta과'dict' 인수에'_Meta' 생성자로 전달할 수 있습니다 (CLS, 이름, 염기, DICT = { '__ 문서 __' "" "문서화 문자열을" ""})' 'super' 호출 전에'dict.update ({ '__ doc __': "" "docstring" ""}})를 호출하십시오. 이제 네 가지 옵션이 있습니다. –

답변

16

:

def f(): # for demonstration 
    pass 

f.__doc__ = "Docstring!" 
help(f) 

이 함께하고 정의 문서화 문자열없이 기능에 python2 및 python3 모두에서 작동합니다. +=도 할 수 있습니다. 그것은 __doc__이고 __docs__이 아님에 유의하십시오.

class MyClass(object): 

    def myMethod(self): 
     pass 

MyClass.myMethod.__func__.__doc__ = "A really cool method" 
+0

오. 나는 이것을 시도하고 그것은 작동하지 않았다. 다시 시도 할게. –

+0

시도해 보니 완벽하게 작동합니다! 정말 고맙습니다! –

+4

클래스 메서드에서이 오류를 시도하고 오류가 발생했습니다. 원래의 질문이 원하는 것이라고 생각하는 클래스 메소드에서, 다음과 같이하고 싶다. self.method .__ func __.__ doc__ – noisygecko

2

또한 클래스/함수 객체에 setattr를 사용하고 문서화 문자열을 설정할 수 있습니다 방법에 대한

, 당신은 방법의 __func__ 속성을 사용해야합니다.

setattr(foo,'__doc__',"""My Doc string""") 
관련 문제