Saya ingin menambahkan link ke metode di kelas saya dari dalam docstring metode lain di kelas yang sama. Saya ingin tautannya berfungsi di sphinx dan terutama juga di Spyder dan IDE Python lainnya.
Saya mencoba beberapa opsi dan hanya menemukan satu yang berfungsi, tetapi itu tidak praktis.
Misalkan struktur berikut di mymodule.py
def class MyClass():
def foo(self):
print 'foo'
def bar(self):
"""This method does the same as <link to foo>"""
print 'foo'
Saya mencoba opsi berikut untuk <link to foo>
:
- : func: `foo`
- : func: `self.foo`
- : func: `MyClass.foo`
- : func: `mymodule.MyClass.foo`
Satu-satunya yang secara efektif menghasilkan tautan adalah: func: `mymodule.MyClass.foo`, tetapi tautannya ditampilkan sebagai mymodule.MyClass.foo()
dan saya ingin tautan yang ditampilkan sebagai foo()
atau foo
.
Tak satu pun dari opsi di atas menghasilkan tautan di Spyder.
Terima kasih atas bantuan Anda.
python
python-sphinx
spyder
saroele.dll
sumber
sumber
hyperlink
olehlink
untuk menghindari kebingungan.bar
yang akan memberikan informasi "fungsi atau metode yang Anda cari adalah foo" ?mymodule.MyClass.foo()
danfoo()
? Dan apa yang Anda sebut "tampilan" ? Apakah ini tampilan string? Atau apakah Anda ingin sebuah benda dikembalikan? Dalam kasus terakhir ini, paens di akhirmymodule.MyClass.foo()
danfoo()
terlalu banyak.mymodule.MyClass.foo
menghasilkan tautan yang memiliki tanda kurung. Dan saya telah sedikit mengulang pertanyaan itu.Jawaban:
Solusi yang berfungsi untuk Sphinx adalah memberi awalan referensi dengan
~
.Sesuai dokumentasi Sphinx tentang Sintaks Referensi Silang ,
Jadi jawabannya adalah:
class MyClass(): def foo(self): print 'foo' def bar(self): """This method does the same as :func:`~mymodule.MyClass.foo`""" print 'foo'
Ini menghasilkan html yang terlihat seperti ini:,
This method does the same as foo()
danfoo()
merupakan tautan.Namun, perhatikan bahwa ini mungkin tidak ditampilkan di Spyder sebagai tautan.
sumber
:any:
peran - lihat catatan tentangdefault_setting
.:func:
, saya merasa itu harus:meth:
.Jika Anda ingin menentukan teks link secara manual, Anda dapat menggunakan:
Untuk informasi selengkapnya, periksa referensi silang objek Python .
sumber
~
lebih dekat dengan apa yang saya butuhkan. Saya telah menempatkannya dalam jawaban terpisah. Ini masih tidak bekerja di Spyder namun ...Bagi saya tampaknya Anda hanya perlu menambahkan
__name__
atau__doc__
pada ekspresi Anda untuk mendapatkan apa yang Anda inginkan.Saya masih belum yakin benar memahami tujuannya
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__
hasil
<unbound method MyClass.foo> foo I am the docstring of foo <function foo at 0x011C27B0> foo I am the docstring of foo
sumber