2013-09-25 15 views
7

To wydaje się głupie pytanie, ale nigdzie nie mogłem znaleźć odpowiedzi. W ramach różnych pakietów mam zestaw modułów, z których każdy zawiera jedną klasę. Kiedy chcę utworzyć instancję klasy I muszą odnosić się do niego dwukrotnie:Unikaj podwójnego wpisywania nazw klas w pytonie.

Przykład: pakiet/obj.py:

class obj(object): 
    pass 

file.py:

import package.obj 
my_obj = package.obj.obj() 

Czy istnieje sposób na reorganizację mojego kodu tak, że nie muszę wpisywać nazwy dwa razy? Idealnie chciałbym po prostu wpisać package.obj().

+1

w '__init __ py',' z importu obj obj', następnie w 'file.py', można skorzystać z pakietu' import obj; my_obj = obj() ' –

+0

Wzniesiono wzmiankę dlaczego ???? –

+1

Ponieważ sfpiano wstawia rzeczywiste fragmenty kodu, aby pokazać, o czym mówił. –

Odpowiedz

7

Python to nie Java. Krępuj się umieścić wiele klas w jednym pliku, a następnie nazwę pliku według kategorii:

import mypackage.image 

this_image = image.png(...) 
that_image = image.jpeg(....) 

Jeśli zajęcia są tak duże, więc chcemy ich w oddzielnych plikach, aby złagodzić ciężar utrzymania, to w porządku, ale zalecana nie powoduje to dodatkowego bólu u użytkowników (lub ciebie, jeśli korzystasz z własnego pakietu;). Zbierz swoich klas publicznych w pakiecie za __init__ pliku (lub pliku kategorii, takich jak image) przedstawić dość płaską przestrzeń nazw:

mypackage na __init__.py (lub image.py):

from _jpeg import jpeg 
from _png import png 

mypackage na _jpeg.py:

class jpeg(...): 
    ... 

mypackage's _png.py:

class png(...): 
    ... 
kod

użytkownik:

# if gathered in __init__ 
import mypackage 
this_image = mypackage.png(...) 
that_image = mypackage.jpeg(...) 

lub:.

# if gathered in image.py 
from mypackage import image 
this_image = image.png(...) 
that_image = image.jpeg(....) 
5

Można użyć from ... import ... oświadczenie:

from package.obj import obj 
my_obj = obj() 
1

Podaj swoje zajęcia i moduły znaczące nazwy. To jest sposób. Nazwij swój moduł "klasami" i nazwij swoją klasę "MyClass".

from package.classes import MyClass 

myobj = MyClass() 
Powiązane problemy