2011-01-07 14 views
7

Jeśli mam struktury katalogów takiego:Ciągnięcie pyton moduł się do nazw pakietów

package/ 
    __init__.py 
    functions.py  #contains do() 
    classes.py  #contains class A() 

I chcę, aby móc nazwać

import package as p 

Jak zrobić zawartość od functions, classes, dostępny jako:

p.do() 
p.A() 

w gwiazdka d:

p.functions.do() 
p.classes.A() 

podziału w plikach jest tam tylko dla wygody (umożliwiający łatwiejszą współpracę), ale wolałbym mieć całą zawartość w tej samej przestrzeni nazw.

Odpowiedz

13

Ty mógłby to zrobić w__init__.py (bo to co importować kiedy import package):

from package.functions import * 
from package.classes import * 

Jednak import * is nearly always a bad idea i to nie jest jeden z wyjątków. Zamiast tego wiele pakietów jawnie importować ograniczony zestaw najczęściej używanych nazw - powiedzmy,

from package.functions import do 
from package.classes import A 

To też umożliwia dostęp do lub A bezpośrednio, ale to nie jest aż tak podatne na kolizje nazwa i innych problemów, które pochodzą z import * .

+0

Doskonale, dziękuję. Nie musiałem "importować *", wybór funkcji działał dobrze. Nie wiedziałem, że zrobienie tego ('from B import B') umieściłoby' B' w przestrzeni nazw 'package' jako' package.B'. Chociaż teraz jest to oczywiste. – noio

Powiązane problemy