Ответ 1
foo.__module__
должен возвращать bar
Если вам нужна дополнительная информация, вы можете получить ее от sys.modules['bar']
, ее атрибуты __file__
и __package__
могут быть интересными.
У меня есть модуль Python с функцией в нем:
== bar.py ==
def foo(): pass
== EOF ==
И затем я импортирую его в глобальное пространство имен так:
from bar import *
Итак, теперь функция foo
доступна мне. Если я его распечатаю:
print foo
Переводчик с радостью сообщает мне:
<function foo at 0xb7eef10c>
Есть ли способ узнать, что функция foo
появилась из модуля bar
в этот момент?
foo.__module__
должен возвращать bar
Если вам нужна дополнительная информация, вы можете получить ее от sys.modules['bar']
, ее атрибуты __file__
и __package__
могут быть интересными.
Попробуйте следующее:
help(foo.func_name)
Вместо
from bar import *
использовать
from bar import foo
Использование синтаксиса from ... import *
- плохой стиль программирования именно потому, что ему трудно понять, откуда взялись элементы вашего пространства имен.
Если у вас есть IPython, вы также можете использовать ?
:
In[16]: runfile?
Signature: runfile(filename, args=None, wdir=None, is_module=False, global_vars=None)
Docstring:
Run filename
args: command line arguments (string)
wdir: working directory
File: /Applications/PyCharm.app/Contents/helpers/pydev/_pydev_bundle/pydev_umd.py
Type: function
Сравните с __module__
:
In[17]: runfile.__module__
Out[17]: '_pydev_bundle.pydev_umd'