Chcę dodać link do metody w mojej klasie z poziomu dokumentacji innej metody tej samej klasy. Chcę, aby link działał w sfinksie, a preferencyjnie również w Spyder i innych Python IDE.
Wypróbowałem kilka opcji i znalazłem tylko jedną, która działa, ale jest uciążliwa.
Załóżmy, że następująca struktura w mymodule.py
def class MyClass():
def foo(self):
print 'foo'
def bar(self):
"""This method does the same as <link to foo>"""
print 'foo'
Wypróbowałem następujące opcje <link to foo>
:
- : func: `foo`
- : func: `self.foo`
- : func: `MyClass.foo`
- : func: `mymodule.MyClass.foo`
Jedynym, który skutecznie tworzy link, jest: func: `mymodule.MyClass.foo`, ale link jest wyświetlany jako mymodule.MyClass.foo()
i chcę, aby był wyświetlany jako foo()
lub foo
.
Żadna z powyższych opcji nie tworzy linku w Spyder.
Dzięki za pomoc.
python
python-sphinx
spyder
saroele
źródło
źródło
hyperlink
,link
aby uniknąć nieporozumień.bar
, która dostarczy informacji "funkcja lub metoda, której szukasz to foo" ?mymodule.MyClass.foo()
afoo()
? A co nazywasz „wyświetlaczem” ? Czy to wyświetlanie ciągu? A może chcesz, aby obiekt został zwrócony? W tym ostatnim przypadku paeny na końcumymodule.MyClass.foo()
ifoo()
to za dużo.mymodule.MyClass.foo
spowodowało, że link ma nawiasy. I ponownie nieco przeformułowałem pytanie.Odpowiedzi:
Rozwiązaniem, które działa w przypadku Sphinx, jest poprzedzenie odwołania znakiem
~
.Zgodnie z dokumentacją Sphinx dotyczącą składni odsyłaczy ,
Tak więc odpowiedź brzmi:
class MyClass(): def foo(self): print 'foo' def bar(self): """This method does the same as :func:`~mymodule.MyClass.foo`""" print 'foo'
Powoduje to, że kod HTML wygląda następująco:
This method does the same as foo()
ifoo()
jest linkiem.Należy jednak pamiętać, że może to nie być wyświetlane w Spyder jako łącze.
źródło
:any:
rolą - zobacz notatkę odefault_setting
.:func:
stwierdziłem, że tak musi być:meth:
.Jeśli chcesz ręcznie określić tekst linku, możesz użyć:
Aby uzyskać więcej informacji, sprawdź odsyłacze do obiektów języka Python .
źródło
~
jest bliższy temu, czego potrzebuję. Umieściłem to w osobnej odpowiedzi. Jednak nadal nie działa w Spyder ...Wydaje mi się, że wystarczy dodać
__name__
lub__doc__
do wyrażenia, aby uzyskać to, czego chcesz.Nadal nie jestem pewien, czy poprawnie zrozumiałem cel
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__
wynik
<unbound method MyClass.foo> foo I am the docstring of foo <function foo at 0x011C27B0> foo I am the docstring of foo
źródło