Saya mencoba melakukan warisan kelas dengan Python. Saya ingin setiap kelas dan kelas yang diwariskan memiliki dokumen yang bagus. Jadi saya pikir untuk kelas yang diwariskan, saya ingin:
- mewarisi kelas dasar docstring
- mungkin menambahkan dokumentasi tambahan yang relevan ke docstring
Apakah ada cara (mungkin elegan atau pythonic) untuk melakukan manipulasi docstring semacam ini dalam situasi pewarisan kelas? Bagaimana dengan multiple inheritance?
python
inheritance
documentation
Craig McQueen
sumber
sumber
inspect.getdoc
akan mencari pohon warisan sampai menemukan docstring.Jawaban:
Kamu bukanlah satu - satunya! Ada diskusi
comp.lang.python
tentang ini beberapa waktu yang lalu, dan resep telah dibuat. Lihat di sini .sumber
Anda dapat menggabungkan docstrings dengan mudah:
Namun, itu tidak berguna. Kebanyakan alat pembuatan dokumentasi ( termasuk Sphinx dan Epydoc ) sudah akan menarik docstring induk, termasuk untuk metode. Jadi Anda tidak perlu melakukan apapun.
sumber
Tidak terlalu elegan, tetapi sederhana dan langsung:
Sekarang:
sumber
Init docstring
juga, apakah ada cara untuk melakukannya dalam definisiY
? Satu-satunya cara saya dapat melakukannya adalah dengan__init__.__doc__ = X.__init__.__doc__ + " Also another param"
mengikuti__init__
definisi diY
tetapi ini tampaknya mengacaukan pemformatan, menyebabkan ruang tambahan ekstra.Stile campuran yang dapat mempertahankan sintaks docstring yang diwarisi dan pengurutan yang disukai dapat berupa:
Dengan keluaran yang sama dengan keluaran Alex:
Es tipis: bermain dengan docstring dapat membuat modul Anda tidak dapat digunakan dengan
python -OO
, mengharapkan beberapa:sumber
Saya menulis custom_inherit untuk menyediakan beberapa alat sederhana dan ringan untuk menangani pewarisan docstring.
Itu juga datang dengan beberapa gaya default yang bagus untuk menggabungkan berbagai jenis docstring (misalnya Numpy, Google, dan docstrings yang diformat ulang). Anda juga dapat memberikan gaya Anda sendiri dengan sangat mudah.
Bagian docstring yang tumpang tindih akan tunduk pada bagian anak, jika tidak maka akan digabungkan dengan format yang bagus.
sumber