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