[python] python docstring의 클래스 메서드에 연결

동일한 클래스의 다른 메서드의 독 스트링 내에서 클래스의 메서드에 대한 링크를 추가하고 싶습니다. 링크가 스핑크스에서 작동하고 우선적으로 Spyder 및 기타 Python IDE에서도 작동하기를 원합니다.

몇 가지 옵션을 시도했지만 작동하는 옵션 만 찾았지만 번거 롭습니다.

다음 구조를 가정하십시오. mymodule.py

def class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as <link to foo>"""
        print 'foo'

다음 옵션을 시도했습니다 <link to foo>.

  • : func :`foo`
  • : func :`self.foo`
  • : func :`MyClass.foo`
  • : func :`mymodule.MyClass.foo`

링크를 효과적으로 생성하는 유일한 것은 : func :`mymodule.MyClass.foo`이지만 링크는로 표시 mymodule.MyClass.foo()되고 나는 foo()또는 로 표시되는 링크를 원합니다 foo.
위의 옵션 중 어떤 것도 Spyder에서 링크를 생성하지 않습니다.

당신의 도움을 주셔서 감사합니다.



답변

Sphinx에서 작동하는 솔루션은 참조 앞에 ~.

상호 참조 구문 에 대한 스핑크스 문서에 따라

콘텐츠 앞에 ~를 붙이면 링크 텍스트는 대상의 마지막 구성 요소 만됩니다. 예를 들어 : py : meth : ~Queue.Queue.get는 Queue.Queue.get을 참조하지만 링크 텍스트로 get 만 표시합니다.

그래서 대답은 :

class MyClass():
    def foo(self):
        print 'foo'
    def bar(self):
        """This method does the same as :func:`~mymodule.MyClass.foo`"""
        print 'foo'

html로 이러한 결과는 다음과 같이보고 : This method does the same as foo()foo()링크입니다.

그러나 이것은 Spyder에서 링크로 표시되지 않을 수 있습니다.


답변

링크 텍스트를 수동으로 지정하려면 다음을 사용할 수 있습니다.

:func:`my text <mymodule.MyClass.foo>`

자세한 내용은 Cross-referencing Python objects를 확인 하세요.


답변

원하는 것을 얻으려면 표현에 추가 __name__하거나 __doc__표현 해야하는 것 같습니다 .
아직 목표를 정확히 이해했는지 모르겠습니다.

class MyClass():
    def foo(self):
        """I am the docstring of foo"""
        print 'foo'
    def bar(self):
        """This method does the same as <link to foo>"""
        print 'foo'

print
print MyClass.foo
print MyClass.foo.__name__
print MyClass.foo.__doc__
print
print MyClass.__dict__['foo']
print MyClass.__dict__['foo'].__name__
print MyClass.__dict__['foo'].__doc__

결과

<unbound method MyClass.foo>
foo
I am the docstring of foo

<function foo at 0x011C27B0>
foo
I am the docstring of foo


답변