[Python-de] Anfaengerfragen

Martin v. Löwis martin at v.loewis.de
Sat Apr 19 10:23:12 EDT 2003


Gerson.Kurz at t-online.de (Gerson Kurz) writes:

> Frage 1) Warum muß factory in __init__.py definiert sein? Weil es halt so
> ist, ok, aber mich wurde die Begrundung fur diese Entscheidung
> interessieren.

Muss es gar nicht. Du könntest es beispielsweise auch in
transport.management definieren, und in transport.__init__
schreiben

from transport.management import factory

Da Du aber wohl wissen willst: "Warum muss factory in __init__.py
gebunden werden?" lautet die Antwort "Weil es keine vernünftige
Alternative dazu gibt". 

Du hättest vielleicht erwartet, es in transport/factory.py ablegen zu
können. Nur: Wie soll Python es dort finden? Soll ein "import paket"
alle enthaltenen Module importieren? Das ist zu teuer: Da müsste man
ja (u.U. rekursiv!) ganz viele Module laden, wenn ein Paket importiert
wird; das gibt unakzeptable Startup-Kosten.

> Gibt es vielleicht einen Trick, den ich nicht kenne, wie man Quelldateien in
> einem module-Verzeichnis heraus als Klassen ansprechen kann? 

Nein. In Python gibt es (anders als in Java) einen Unterschied
zwischen Modulen und Klassen: Eine Modul kann mehrere Klassen
enthalten.

> session = SerialTransportSession.SerialTransportSession(...)
> 
> Das sieht einfach Scheisse aus! Idealerweise dergestalt, daß, ahnlich wie in
> Java (und ja, ich habe auch lange daruber geflucht aber ich kann jetzt den
> Vorteil darin sehen) der Quelldateiname den Namen der extern sichtbaren
> Klasse definiert, interne Funktionen hingegen nicht exportiert werden?

Verwende Module richtig! Gruppiere Deine Klassen in logische
Einheiten, und definiere ein Modul pro logischer Einheit. Zur
Unterscheidung von internen und externen Funktionen verwende die
Variable __all__: Alle externen Funktionen und Klassen werden in
__all__ aufgeführt.

Wenn Du dabei feststellst, dass es außer "transport" keine logische
Gruppierung gibt, verzichte auf Pakete, und definiere "transport" als
Modul.

> Frage 3) Gibt es eigentlich ein Projekt, Design Patterns exemplarisch in
> Python vorzustellen? 

Wie wär's mit

http://www.python.org/workshops/1997-10/proceedings/savikko.html

Bruce Eckel hat ein Tutorial zu dem Thema gegeben (siehe
http://www.python10.org/p10-tutorialsMorning.html
); das steht aber nicht im Netz. Allerdings geht es in "Thinking
Python" auch um Entwurfsmuster; siehe

http://www.mindview.net/Books/TIPython

> Wie ist den eure Einschatzung der diesbezuglichen Entwicklungen?

Ich glaube, XP macht viele nützliche Vorschläge, und man tut gut
daran, sie alle in Erwägung zu ziehen. Allerdings sollte man es
nicht religiös sehen.

> Frage 4) Gibt es ein doxygen Aquivalent fur Python? Und nein, pydoc reicht
> nicht aus. (Doxygen zeichnet z.B. prima Abhangigkeitsdiagramme, und erzeugt
> CHM files etc.)

Ein Tool, was prima Abhängigkeitsdiagramme zeichnet, kenne ich nicht.

Ciao,
Martin




More information about the Python-de mailing list