Saya memiliki modul python yang diinstal pada sistem saya dan saya ingin dapat melihat fungsi / kelas / metode apa yang tersedia di dalamnya.
Saya ingin memanggil fungsi doc pada masing-masing. Dalam ruby saya dapat melakukan sesuatu seperti ClassName.methods untuk mendapatkan daftar semua metode yang tersedia di kelas itu. Apakah ada yang serupa dengan python?
misalnya. sesuatu seperti:
from somemodule import foo
print foo.methods # or whatever is the correct method to call
python
reflection
module
inspect
Chris Gow
sumber
sumber
Jawaban:
The
inspect
modul. Juga lihatpydoc
modul,help()
fungsi dalam interpreter interaktif danpydoc
alat baris perintah yang menghasilkan dokumentasi yang Anda cari. Anda bisa memberi mereka kelas yang ingin Anda lihat dokumentasi. Mereka juga dapat menghasilkan, misalnya, output HTML dan menulisnya ke disk.sumber
ast
modul dalam situasi tertentu dalam jawaban saya .dir
untuk mengembalikan fungsi dan variabel; gunakaninspect
untuk memfilter fungsi saja; dan gunakanast
untuk menguraikan tanpa mengimpor.Anda dapat menggunakan
dir(module)
untuk melihat semua metode / atribut yang tersedia. Lihat juga PyDocs.sumber
dir()
fungsi “upaya untuk menghasilkan yang paling relevan, daripada lengkap, informasi”. Sumber: docs.python.org/library/functions.html#dir .inspect
.Setelah Anda
import
mengedit modul, Anda bisa melakukan:... Untuk mendapatkan dokumen pada semua fungsi sekaligus, secara interaktif. Atau Anda dapat menggunakan:
... Untuk sekadar daftar nama semua fungsi dan variabel yang ditentukan dalam modul.
sumber
inspect
modul juga dapat mencantumkan variabel, meskipun tidak secara eksplisit diminta di sini. Solusi ini hanya memerlukan objek bawaan, yang dapat sangat berguna dalam beberapa kasus di mana Python diinstal di lingkungan yang dikunci / dikunci / rusak.dir
akan mencetak hasilnya, namun sepertinya Anda perlu melakukannyaprint(dir(modulename))
.Contoh dengan memeriksa:
getmembers mengembalikan daftar tupel (object_name, object_type).
Anda dapat mengganti fungsi dengan fungsi isXXX lainnya di modul inspect.
sumber
getmembers
dapat mengambil predikat, jadi contoh Anda juga bisa ditulis:functions_list = [o for o in getmembers(my_module, isfunction)]
functions_list = getmembers(my_module, predicate)
karena sudah mengembalikan daftar;)sumber
Demi kelengkapan, saya ingin menunjukkan bahwa kadang-kadang Anda mungkin ingin mem - parsing kode alih-alih mengimpornya. Sebuah
import
akan mengeksekusi ekspresi tingkat atas, dan itu bisa menjadi masalah.Sebagai contoh, saya membiarkan pengguna memilih fungsi titik masuk untuk paket yang dibuat dengan zipapp . Menggunakan
import
daninspect
berisiko menjalankan kode sesat, yang menyebabkan macet, pesan bantuan dicetak, dialog GUI muncul dan sebagainya.Sebagai gantinya saya menggunakan modul ast untuk membuat daftar semua fungsi tingkat atas:
Dengan
list.py
memasukkan kode ini dan menggunakannya sebagai input, saya dapat:Tentu saja, menavigasi AST kadang-kadang bisa rumit, bahkan untuk bahasa yang relatif sederhana seperti Python, karena AST cukup rendah. Tetapi jika Anda memiliki kasus penggunaan yang sederhana dan jelas, itu bisa dilakukan dan aman.
Meskipun demikian, kerugiannya adalah Anda tidak dapat mendeteksi fungsi yang dihasilkan saat runtime
foo = lambda x,y: x*y
.sumber
__version__
dll). Apakah ada cara untuk mendapatkannya?Untuk kode yang tidak ingin diuraikan, saya merekomendasikan pendekatan berbasis AST dari @csl di atas.
Untuk yang lainnya, modul inspeksi benar:
Ini memberikan daftar 2-tupel dalam formulir
[(<name:str>, <value:function>), ...]
.Jawaban sederhana di atas diisyaratkan dalam berbagai tanggapan dan komentar, tetapi tidak dipanggil secara eksplisit.
sumber
Ini akan melakukan trik:
Namun, jika Anda merasa terganggu membaca daftar yang dikembalikan, cukup gunakan loop berikut untuk mendapatkan satu nama per baris.
sumber
inspect
. Selain itu, bagaimana ini berbeda dari jawaban @ DanLenski?dir(module)
adalah cara standar saat menggunakan skrip atau penerjemah standar, sebagaimana disebutkan dalam sebagian besar jawaban.Namun dengan shell python interaktif seperti IPython Anda dapat menggunakan tab-completion untuk mendapatkan gambaran umum dari semua objek yang didefinisikan dalam modul. Ini jauh lebih nyaman, daripada menggunakan skrip dan
print
untuk melihat apa yang didefinisikan dalam modul.module.<tab>
akan menunjukkan semua objek yang didefinisikan dalam modul (fungsi, kelas, dan sebagainya)module.ClassX.<tab>
akan menunjukkan kepada Anda metode dan atribut kelasmodule.function_xy?
ataumodule.ClassX.method_xy?
akan menunjukkan kepada Anda dokumentasi fungsi / metode tersebutmodule.function_x??
ataumodule.SomeClass.method_xy??
akan menunjukkan kode sumber fungsi / metode kepada Anda.sumber
Untuk fungsi global
dir()
adalah perintah untuk menggunakan (sebagaimana disebutkan dalam sebagian besar jawaban ini), namun ini mencantumkan fungsi publik dan non-publik bersamaan.Misalnya menjalankan:
Mengembalikan fungsi / kelas seperti:
Beberapa di antaranya umumnya tidak dimaksudkan untuk penggunaan pemrograman umum (tetapi oleh modul itu sendiri, kecuali dalam kasus DunderAliases seperti
__doc__
,__file__
dll). Untuk alasan ini mungkin tidak berguna untuk mendaftar mereka dengan yang umum (ini adalah bagaimana Python tahu apa yang harus didapatkan saat menggunakanfrom module import *
).__all__
dapat digunakan untuk mengatasi masalah ini, ia mengembalikan daftar semua fungsi publik dan kelas dalam modul (yang tidak dimulai dengan garis bawah -_
). Lihat Bisakah seseorang menjelaskan __all__ dengan Python? untuk penggunaan__all__
.Berikut ini sebuah contoh:
Semua fungsi dan kelas dengan garis bawah telah dihapus, hanya menyisakan yang didefinisikan sebagai publik dan karenanya dapat digunakan melalui
import *
.Catatan yang
__all__
tidak selalu ditentukan. Jika tidak disertakan maka sebuahAttributeError
dimunculkan.Kasus ini adalah dengan modul ast:
sumber
Tak satu pun dari jawaban ini akan berfungsi jika Anda tidak dapat mengimpor kata file Python tanpa kesalahan impor. Ini adalah kasus bagi saya ketika saya memeriksa file yang berasal dari basis kode besar dengan banyak dependensi. Berikut ini akan memproses file sebagai teks dan mencari semua nama metode yang dimulai dengan "def" dan mencetaknya serta nomor barisnya.
sumber
ast
modul. Lihat jawaban saya sebagai contoh.Kecuali dir (modul) atau bantuan (modul) yang disebutkan dalam jawaban sebelumnya, Anda juga dapat mencoba:
- Buka ipython
- import module_name
- ketik module_name, tekan tab. Ini akan membuka jendela kecil dengan daftar semua fungsi dalam modul python.
Terlihat sangat rapi.
Berikut ini cuplikan daftar semua fungsi modul hashlib
sumber
Ini akan menambahkan semua fungsi yang didefinisikan dalam modul_Anda dalam daftar.
sumber
unit8_conversion_methods
? Apakah ini hanya contoh dari nama modul?[getattr(your_module, func) for func in dir(your_module) if type(getattr(your_module, func)).__name__ == "function"]
Anda dapat menggunakan metode berikut untuk mendapatkan daftar semua fungsi di modul Anda dari shell:
import module
sumber
sumber
Keluaran:
sumber