To, co próbuję zrobić, wyglądałoby tak w linii poleceń:
>>> import mymodule
>>> names = dir(mymodule)
Jak mogę uzyskać odniesienie do wszystkich zdefiniowanych nazw mymodule
z mymodule
samego siebie?
Coś takiego:
# mymodule.py
names = dir(__thismodule__)
Odpowiedzi:
Po prostu użyj globals ()
http://docs.python.org/library/functions.html#globals
źródło
Jak wspomniano wcześniej, globals udostępnia słownik, w przeciwieństwie do dir (), który zawiera listę nazw zdefiniowanych w module. Sposób, w jaki zazwyczaj to robię, wygląda następująco:
źródło
sys.modules[__name__].__doc__
.operators.attrgetter('module.attribute')(sys.modules[__name__])
- wiesz, jeśli robisz szalone rzeczy, ludzie mówią ci, żebyś nie robił, jak dynamiczne importowanie pakietów z łańcuchów, a następnie małpa łatanie tych, nie będąc w klasie, czy cokolwiek ...sys.modules[__name__].__doc__
==,__doc__
ponieważ jest to zdefiniowane w bieżącej przestrzeni nazw. Pobieranie obiektu modułu w celu uzyskania dostępu do jego własnych atrybutów nie jest zatem konieczne.Może być późno na odpowiedź, ale sam nie znalazłem właściwej odpowiedzi. Najbliższe i najbardziej precyzyjne rozwiązanie (szybsze niż
inspect.stack()
) w Pythonie3.7.x
:Plusy :
globals()
metoda.pytest
:Cons:
pytest.exe
który może nie być tym, czego chcesz.inspect.getmodule
nadal może zwracać None na prawidłowych modułach w zależności od podpięciaMam rozszerzenie do pythona: Jak zaimportować moduł mając pełną ścieżkę?
Rozszerzenie posiadające funkcje opakowujące dla tego przypadku:
Musisz tylko poprawnie zainicjować rozszerzenie:
źródło