__init__.py als file ? OO fragen.

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Mati
User
Beiträge: 68
Registriert: Dienstag 6. Juni 2006, 16:54

Donnerstag 6. Juli 2006, 12:46

Hallo

ich habe ein Programm vor mir liegen das Objektorientiert programmiert ist. Jetzt gibt es verschiedene Klassen in verschiedenen files.
1) wird mit from ordner1.class import * diese Datei/Modul importiert ? Schon oder? Oder wie darf ich das verstehen?

2) Es gibt in jedem ordner ein __init__.py file in dem nur eine Zeile steht:
__all__ = ["class"]
also class ist der Klassenname der im selben Ordner steht.

3) ein Aufruf class.class() ist doch wie ein Konstruktor-Aufruf oder?
also in der klasse class muss stehen __init__(self) was der Konstruktor ist oder ?

4) es erscheint mir seltsam dass wenn man in eine datei namens test.py NUR methoden reinschreibt man ganz einfach auf diese Methoden in anderen Klassen so zugreifen kann: test.methode1()
normal?


Danke für eure Hilfe :)
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Donnerstag 6. Juli 2006, 13:26

Erstmal ein paar Links, die eigentlich alles ausreichend erklären:

http://www.pythonwiki.de/ModulImporte
http://docs.python.org/tut/node8.html

damit man deine Fragen etwas einfacher beantworten kann, poste doch einfach mal die korrekten Pfade ohne Prosa, also z.B. so (vermutet):

/main.py
/ordner1
/ordner1/__init__.py
/ordner1/class.py

denn zB bei 1) kommt es drauf an, wo die datei liegt, in der das statement steht.

3) vermutlich. Das kommt drauf an, was du genau importiert hast.
Wenn das linke class ein Modul ist, und das rechte class die Klasse in diesem Modul, dann ja. Mach dir doch einfach mal eine Console auf, tippe import X und gucke dir an, was X ist.
Das hat mir immer ganz gut geholfen.

4) das sind keine Methoden, sondern Funktionen, vermute ich. Methoden sind Funktionen, die zu klassen/objekten gehören.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 6. Juli 2006, 18:43

Die Seite ist umgezogen, ist nun [wiki]Modul Import[/wiki].
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Mati
User
Beiträge: 68
Registriert: Dienstag 6. Juni 2006, 16:54

Freitag 7. Juli 2006, 11:23

danke aber so ganz hab ichs noch nicht verstanden...
ich habe folgendes:

/start.py
/ordner1/module/

start.py ist das start skript

unter dem ordner module befindet sich:

/modul1
/modul2
/modul3
__init__.py


und in der init steht hier __all__=["start"]

jetzt in einem modul steht z.B. module1/

/__init__.py
/iii.py

und in der init steht __all__=["iii"]


kann mir jemand diese struktur erklaeren???
BlackJack

Freitag 7. Juli 2006, 13:49

Verzeichnisse mit einer `__init__.py` nennt man Packages. Die `__ini__.py` macht ein Verzeichnis zu einem Packhage, da muss noch nicht einmal was drin stehen.

Andere Dateien mit der Endung ``*.py`` sind Module.

In einem Modul können sich dann Funktionen und Klassen und andere Modulweit sichtbare Objekte befinden.

Ich weiss nicht ob ich Deine Struktur richtig verstanden habe, bzw. ob Du die richtig wiedergegeben hast. Ich gehe jetzt mal davon aus:

Code: Alles auswählen

program/
    start.py
    __ini__.py
    foos/
        foo1/
            i.py
            __init__.py
        foo2/
            ii.py
            __init__.py
        __init__.py

Dann würde alles Zusammen in einem Package mit dem Namen `program` liegen, das ein `start` Modul enthält und ein weiteres Package mit dem Namen `foos`. Dieses wiederum enthält die Packages `foo1` und `foo2` jeweils mit den Modulen `i` und `ii`.

Wenn man ein Package importiert, dann wird der Code in der jeweiligen `__init__.py` ausgeführt.

Den Sinn von der Struktur kann ich allerdings nicht erklären. Für jede Klasse ein eigenes Modul in einem eigenen Package!?
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Samstag 8. Juli 2006, 11:50

BlackJack hat geschrieben:Den Sinn von der Struktur kann ich allerdings nicht erklären. Für jede Klasse ein eigenes Modul in einem eigenen Package!?
Da hat wahrscheinlich jemand zu lange Java programmiert ;)
Antworten