2014-01-08 5 views
0

Если я импортировать модуль питона, используя синтаксис вроде этого:Python Пространства имен и модули

import my_module 

можно позже использовать несколько простейших команд, чтобы получить представление о том, что модуль, где он находится и и т.д. Например:

print(my_module) 

выходы: модуль 'my_module' от '' my_module.py

dir(my_module) 

выходов: [ 'MyCla сс, 'встроенные функции', 'документ', 'файл', 'имя', 'пакет', 'математика', 'ОС', 'SYS']

I даже может узнать абсолютный путь к модулю с помощью:

print os.path.abspath(my_module.__file__ ) 

выходы: /Users/julia/Documents/classes/my_module.py

Но если вместо импорта «my_module» Я бы быть с помощью:

from my_module import MyClass 

все, что я могу это:

print MyClass 

, который выводит: my_module.MyClass

Я вижу MyClass пришел из my_module файла. Но, к сожалению, это все, что я могу получить, поскольку ни одна из команд, которые я использовал для получения информации о модуле, не работает. Здесь использование и их вывод:

print dir(my_module.MyClass) NameError: name 'my_module' is not defined 

print dir(my_module) NameError: name 'my_module' is not defined 

print my_module name 'my_module' is not defined 

Какой команда (-о) я должен использовать во время отслеживания импортированных модулей принесенных

from my_module import MyClass 

синтаксиса?

+1

да? Что за вопрос? если вы просто импортируете MyClass ... вы импортировали только этот класс ... –

+0

это сработало для меня. возможно, вы вообще не импортируете этот модуль и хотите распечатать его детали. – mojibuntu

ответ

1

Проблема в том, что

from my_module import MyClass 

импортирует только MyClass, но не весь модуль.

Если вы хотите узнать имя модуля MyClass был импортирован из, вы можете использовать:

print MyClass.__module__ 

Если вы хотите использовать другой материал, из того же модуля вы можете использовать:

my_module = __import__(MyClass.__module__) 
print dir(my_module) 

Но было бы гораздо легче просто написать:

import my_module 
0

Благодаря Mr.Crash! Вот резюме:

Если модуль был импортирован с:

from my_module import MyClass 

не называйте модуль, используя его имя напрямую. Вместо этого добраться до него с помощью класса импортируемого из этого модуля (с помощью модуля Аттрибута класса), таких как:

print dir(MyClass.__module__) 
print os.path.abspath(MyClass.__module__) 
Смежные вопросы