Как получить путь к модулю, когда у меня есть класс из этого модуля - PullRequest
2 голосов
/ 10 марта 2010

В Python, если у меня есть класс foo, я могу call foo.__module__ получить строку с именем модуля, частью которого он является.

Если у меня есть модуль bar, я могу вызвать bar.__file__, чтобы получить строку с путем, откуда был загружен модуль.

Как, когда у меня есть только класс foo, я могу получить путь к модулю, частью которого он является? (foo.__module__ возвращает строку, а не экземпляр названного им модуля)

Ответы [ 2 ]

6 голосов
/ 10 марта 2010

sys.modules - это отображение имени модуля в модуль:

sys.modules[foo.__module__].__file__
3 голосов
/ 10 марта 2010

Для таких задач самоанализа я всегда рекомендую использовать модуль inspect стандартной библиотеки Python: он может обрабатывать некоторые угловые случаи & c и делает весь процесс намного более плавным. Для вашей конкретной задачи может пригодиться inspect.getsourcefile - например, рассмотрим ...:

>>> from sched import scheduler as someclass
>>> import inspect
>>> inspect.getsourcefile(someclass)
'/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/sched.py'

это всегда пытается дать вам файл .py, а не иногда файл .py и иногда файл .pyc - не большое дело, но еще одна полезная "регулярность".

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...