2015-09-25 2 views
2

Давайте представим, что у меня есть этот файл называется file1.py:Python, я мог импортировать * без ввезенных классов

from app1 import ClassX 

class Class1: 
    pass 

class Class2: 
    pass 

Если в другом файл с именем file2.py я хочу импортировать Class1 и Class2 без явного импорта этих классов я обычно нужен использовать

from file1 import * 

Моя проблема в том, когда я это делаю, я импортировать ClassX тоже, но я не хочу, чтобы импортировать ClassX и я не импортировать Class1 и Class2 ехр законная.

Есть какой-то способ импортировать только классы, которые я действительно разработал в File1?

+4

Это то, что [ '__all__'] (http://stackoverflow.com/questions/ 44834/can-someone-explain-all-in-python) для. Он контролирует то, что автоматически включается, когда вы «из импорта foo». –

ответ

2

Чтобы поставить точку тоньше на комментарий Джонатон Рейнхарт на вопрос:

# app2.py 
from app1 import ClassX 

__all__ = ['Class1', 'Class2'] 

class Class1: 
    pass 

class Class2: 
    pass 

 

# test.py 
from app2 import * 

c = Class1() 
d = Class2() 
try: 
    e = ClassX() 
except NameError: 
    print "Working as intended!" 
+0

Адам, это круто. Но я вижу только одну проблему, если я создаю Class3 на file1.py, мне нужно добавить в __all__ var. Есть ли другой способ сделать это? Не нужно добавлять в __all__ каждый раз, когда я создаю новый класс? – Rubico

+3

@ Rubico нет способа (что я знаю) создать так называемый «черный список» предметов, которые нужно импортировать. Во всяком случае, вы действительно должны избегать построения 'from modulename import * '. –

Смежные вопросы