Apa yang saya coba lakukan akan terlihat seperti ini di baris perintah:
>>> import mymodule
>>> names = dir(mymodule)
Bagaimana saya bisa mendapatkan referensi ke semua nama yang didefinisikan mymodule
dari dalam mymodule
dirinya sendiri?
Sesuatu seperti ini:
# mymodule.py
names = dir(__thismodule__)
Jawaban:
Cukup gunakan global ()
http://docs.python.org/library/functions.html#globals
sumber
Seperti yang disebutkan sebelumnya, globals memberi Anda kamus, bukan dir () yang memberi Anda daftar nama yang ditentukan dalam modul. Cara saya biasanya melihat ini selesai adalah seperti ini:
sumber
sys.modules[__name__].__doc__
.operators.attrgetter('module.attribute')(sys.modules[__name__])
- Anda tahu, jika Anda melakukan hal-hal gila, orang-orang menyuruh Anda untuk tidak melakukan seperti mengimpor paket secara dinamis dari string dan kemudian menambalnya saat tidak berada dalam kelas atau apa pun ...sys.modules[__name__].__doc__
==__doc__
karena ini didefinisikan dalam namespace saat ini. Oleh karena itu, mengambil objek modul untuk mengakses atributnya sendiri tidak diperlukan.Mungkin terlambat untuk menjawab, tetapi saya tidak menemukan jawaban yang benar untuk diri saya sendiri. Solusi paling dekat dan tepat (lebih cepat dari
inspect.stack()
) di python3.7.x
:Kelebihan :
globals()
metode.pytest
:Kekurangan:
pytest.exe
yang mungkin bukan yang Anda inginkan.inspect.getmodule
masih dapat mengembalikan None pada modul yang valid tergantung pada hookingSaya memiliki ekstensi ke python: Bagaimana cara mengimpor modul yang diberikan jalur lengkap?
Ekstensi yang memiliki fungsi pembungkus untuk kasus tersebut:
Anda harus menginisialisasi ekstensi dengan benar:
sumber