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


87

동일한 클래스의 다른 메서드의 독 스트링 내에서 클래스의 메서드에 대한 링크를 추가하고 싶습니다. 링크가 스핑크스에서 작동하고 우선적으로 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에서 링크를 생성하지 않습니다.

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


"내부에서 ... 추가" 는 무엇을 의미합니까 ? ??? 링크와 하이퍼 링크의 차이점은 무엇입니까?
eyquem 2014 년

혼란을 피하기 위해 로 교체 hyperlink했습니다 link.
saroele 2014-01-22

나는 아직도 당신의 질문을 잘 이해하지 못합니다. 스핑크스 나 스파이더 또는 다른 파이썬 IDE에서 "검색하는 함수 나 방법이 foo"인bar 정보를 제공하는 함수의 독 스트링에 대한 질문을 수행하고 싶습니까?
eyquem

둘째, mymodule.MyClass.foo()과 사이에 어떤 차이가 foo()있습니까? 그리고 당신은 "디스플레이"를 무엇 이라고 부릅 니까? 문자열 표시입니까? 아니면 개체를 반환 하시겠습니까? 이 후자의 경우 mymodule.MyClass.foo()및 끝에있는 paens foo()가 너무 많습니다.
eyquem

혼동을 드려 죄송합니다. 질문을 간결하게 설명하기는 항상 어렵습니다. 클릭 할 수있는 링크가 있으면 foo ()의 docstring (IDE의 문서 창 또는 Sphinx의 html 빌드)으로 이동합니다. 괄호와 관련하여 : 맞습니다 : : func : mymodule.MyClass.foo괄호가있는 링크가 생성되었습니다. 그리고 나는 질문을 다시 약간 바 꾸었습니다.
saroele 2014-01-22

답변:


88

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에서 링크로 표시되지 않을 수 있습니다.


15
( Spyder dev here ) @saroele 앞으로이 상황을 개선 할 계획입니다. 난 완전히 정말 그것을 가지고 멋있다고 동의)
카를로스 코르도바

정말 좋네요. 기대하고 있습니다. Spyder에 대한 모든 작업에 감사드립니다!
saroele

:any:역할을 사용하여 수행 할 수 있습니다 default_setting.에 대한 참고 사항을 참조하십시오 .
naught101 2015-08-27

1
전체 모듈 경로를 사용하지 않고 상호 참조 할 수 있습니까?
Jonathan

2
대신에 :func:, 나는 그것이 있어야한다는 것을 알았다 :meth:.
Leo Fang

37

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

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

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


작동합니다. 감사합니다. 링크를 살펴보면 참조 접두사가 ~필요한 것에 더 가깝다는 것을 알았습니다. 나는 그것을 별도의 답변에 넣었습니다. 그러나 스파이더에서는 여전히 작동하지 않습니다 ...
saroele 2014 년

-4

원하는 것을 얻으려면 표현에 추가 __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

1
질문의 요점을 놓친 것 같습니다. Sphinx에서 작성한 문서의 html에 링크 (하이퍼 링크)를 갖고 싶습니다.
saroele 2014 년

당신 말이 맞아요. 그리고 그것은 내가 스핑크스를 모르기 때문입니다. 그래서 스핑크스를 설치해 보았습니다. 그러나 나는 성공하지 못했습니다. 나는 Windows를 사용하고 있으며 문서에서 말한 것처럼 sphinx-quickstart를 사용하려고했습니다. 그러나 설치 과정에 대해 오해가 있다고 생각합니다. 도와 드릴 수 없습니다, 죄송합니다. 나는 스핑크스의 맥락에서 '하이퍼 링크'가 이해해야 할 것이 무엇인지 모른다.
eyquem 2014 년
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.