2016-12-11 1 views
0

Wie soll ich mein Paket implementieren, damit ich folgendes schreiben kann.Wie legen Sie Objekte in einem Modul/Package frei?

Angenommen, mein Modul heißt Market. Es ist ein Ordner im Arbeitsverzeichnis meiner Python-Skript namens goShopping.py

In meinem goShopping.py ich das folgende Stück Code in der Lage sein wollen, schreiben:

import market as mk 

B = mk.Banana(0.99) 
A = mk.Apple(1.10) 
A.buy() 
B.buy() 

Wo Banana und Apple sind Objekte in einer Datei in meinem Modul.

Wie sollte der Modulmarkt geschrieben werden?

Nehmen wir an, ich habe eine Datei im Module-Ordner namens fruits.py, Dort definiere ich Banana und Apple-Klasse. Ich weiß, ich kann den obigen Code wie folgt schreiben:

import market.fruits as mk 

B = mk.Banana(0.99) 
A = mk.Apple(1.10) 
A.buy() 
B.buy() 

Aber ich will das nicht.

Als Lösung dachte ich über eine Erklärung in __init__.py (die __init.py innerhalb des Marktes Ordner) wie folgt mit:

from fruits import Apple,Banana. 

Aber ich erhalte den folgenden Fehler:

AttributeError: module 'market' has no attribute 'Banana' 

Von Zeile:

B = mk.Banana(0.99) 

Wie soll ich strukturieren und was soll ld Ich schreibe, um die Objekte so belichten zu können, wie ich will?

Ich benutze Pythonista für iOS. Ich frage mich, ob das das Problem ist.

+0

Was Sie haben, sollte funktionieren. Wie haben Früchte von Apple importiert, Banana fehlgeschlagen? Was war die Fehlermeldung? Beachten Sie, dass im Allgemeinen bei allen Namen in Python die Groß-/Kleinschreibung beachtet wird, einschließlich der Modul- und Paketnamen. PEP-8 empfiehlt, dass sie alle Kleinbuchstaben sind, was bedeutet, dass ihre entsprechenden Datei-/Ordnernamen auch so sein sollten. – martineau

+0

@martineau Ich habe die Frage mit meiner Fehlermeldung aktualisiert. Nur mein Klassenname ist Großbuchstabe – zeh

+0

Es ist seltsam, dass Sie einen Fehler in der Zeile 'B = mk.Banana (0.99)' bekommen würden, aber nicht eine von der 'von Früchten Import Apple, Banana' in der '__init __. Py'.Fügen Sie direkt nach der Zeile 'import' einen' print (Banana) 'hinzu und sehen Sie, ob das auch zu einem Fehler führt. – martineau

Antwort

0

Wahrscheinlich wird das Modul/Skript nicht importiert. Dies verursacht keine Fehlermeldung. Versuchen Sie, ein Modul namens 'xyz' zu importieren, und Sie werden feststellen, dass Sie keinen Fehler erhalten, solange Sie nicht versuchen, darauf zuzugreifen.

Der wahrscheinlichste Grund ist, dass sich das Modul nicht im selben Ordner wie Ihr Skript befindet oder sich nicht in einem Unterverzeichnis befindet, das ein Skript __init__.py enthält.

Ihr Skript sollte in der Lage sein, jedes Modul in den gleichen Ordner zu importieren. Sie können Module auch aus Paketen importieren. Ein Paket ist ein Ordner mit einem oder mehreren Python-Modulen und einem speziellen Modul namens __init__.py, das den Ordner als Paket markiert. Der Paketordner muss sich im PYTHONPATH befinden oder ein Unterverzeichnis des aktuellen Arbeitsverzeichnisses sein, damit Python es finden kann, aber Unterordner von Ordnern nicht.

Überprüfen Sie this article, die eine schöne Erklärung dafür gibt, wie das funktioniert.

Verwandte Themen