2013-09-25 17 views
7

Dies scheint wie eine dumme Frage, aber ich habe nicht in der Lage, die Antwort überall zu finden. Innerhalb meiner verschiedenen Pakete habe ich eine Reihe von Modulen, die normalerweise jeweils eine Klasse enthalten. Wenn ich eine Instanz einer Klasse erstellen möchten, habe ich zweimal darauf verweisen:Vermeiden Sie doppelte Eingabe Klasse Namen in Python

Beispiel: Paket/obj.py:

class obj(object): 
    pass 

file.py:

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

Ist gibt es eine Möglichkeit, meinen Code so zu reorganisieren, dass ich den Namen nicht zweimal eingeben muss? Idealerweise möchte ich einfach package.obj() eingeben.

+1

In '__init __ py',' von obj import obj', dann in 'file.py', können Sie' aus dem Paket verwenden Importobj; my_obj = obj() ' –

+0

Upvoted warum ???? –

+1

Da sfpiano tatsächlich Code-Snippets eingefügt hat, um anzuzeigen, worüber er gerade gesprochen hat. –

Antwort

7

Python ist nicht Java. Fühlen Sie sich frei viele Klassen in einer Datei zu setzen und dann benennen Sie die Datei nach der Kategorie:

import mypackage.image 

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

Wenn Ihre Klassen so groß sind, so wollen sie in separaten Dateien, um die Wartung Last zu erleichtern, das ist in Ordnung, aber man sollte dann fügen Sie Ihren Benutzern keine zusätzlichen Schmerzen zu (oder Sie selbst, wenn Sie Ihr eigenes Paket verwenden;). Sammeln Sie Ihre öffentlichen Klassen in dem __init__ Datei-Paket (oder eine Kategorie Datei, wie image) einen ziemlich flachen Namensraum zu präsentieren:

mypackage der __init__.py (oder image.py):

from _jpeg import jpeg 
from _png import png 

mypackage der _jpeg.py:

class jpeg(...): 
    ... 

mypackage des _png.py:

class png(...): 
    ... 

Benutzercode:

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

oder:.

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

können Sie from ... import ... Anweisung:

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

Geben Sie Ihre Klassen und Module aussagekräftige Namen. Das ist der Weg. Benennen Sie Ihr Modul 'classes' und benennen Sie Ihre Klasse 'MyClass'.

from package.classes import MyClass 

myobj = MyClass() 
Verwandte Themen