Auf andere Klassen zugreifen

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
je_python_mi
User
Beiträge: 7
Registriert: Dienstag 6. Juli 2010, 13:41

Hallo Leute,

ich habe gerade erst angefangen mich mit der OOP-Struktur innerhalb Pythons auseinanderzusetzen und hätte eine Frage.

Die Struktur meines Programms wurde mit Hilfe von UML erstellt, sodass ich 3 Klassen besitze: Prepocessing, Berechnung und Postprocessing.

Bei der Erzeugung des Source-Codes hat UML mir also die drei Klassen in drei einzelne .py-Dateien erstellt und eine __init__.py erzeugt.

Die Reihenfolge des geplanten Ablaufs ist wie oben genannt: Pre, Berechnung, Postprocessing.

Zum Überblick einer einzelnen Klasse ein Beispiel, wie sie erzeugt wurde:

Code: Alles auswählen

import Berechnung

class Postprocessing:
    m_Berechnung= Berechnung()

    def writeVector():
        pass
Rufe ich an dieser Stelle also die Postprocessing.py auf, lässt er automatisch die vorangegangene Klasse Berechnung durchlaufen. Das klappt soweit.

Ich habe aber die Bezeichnung:

Code: Alles auswählen

m_Berechnung=Berechnung()
allerdings noch nicht gesehen.

1. Was versucht er mir damit zusagen?
2. Ich versuche natürlich mit Werten aus einer Funktion der anderen Klasse weiter zu rechnen, geht das auf diesem Weg?

Als Fehler gibt er zu der Bezeichnung

Code: Alles auswählen

m_Berechnung=Berechnung()
'module object is not callable' an.

Ich hoffe, Ihr könnt mir einen Denkanstoß geben.

Danke im voraus.

J.
je_python_mi
User
Beiträge: 7
Registriert: Dienstag 6. Juli 2010, 13:41

Ergänzung:

Ich denke, dass es an dieser Stelle eine Instanz der Klasse sein soll, aber wie müsste ich diese weiter miteinbinden?

Grüße
Krabman318
User
Beiträge: 21
Registriert: Sonntag 14. August 2011, 14:36

Code: Alles auswählen

import Berechnung
importiert das Modul "Berechnung", in dem sich wahrscheinlich die Klasse "Berechnung" befindet.
Die Fehlermeldung bedeutet, dass du das Modul "Berechnung" logischerweise nicht aufrufen kannst, was du ja auch gar nicht möchtest.
Mit

Code: Alles auswählen

Berechnung.Berechnung()
kannst du auf die Klasse innerhalb des Moduls zugreifen, vorausgesetzt, die Klasse heißt wirklich "Berechnung".
BlackJack

@je_python_mi: Was ist UML? Ich kenne das als grafische Notation, Du sagst aber UML erzeugt Dir irgend etwas!?

Davon ab: Lass das bitte sein. Du verwendest da offensichtlich ein Werkzeug was nicht für Python gedacht ist. Das mag Python-Quelltext erzeugen, aber das ist gruselig. So ein `m_`-Präfix zum Beispiel hat in Python nichts zu suchen. Das macht Sinn bei Sprachen mit implizitem "this", damit man auch ohne dieses "Member"-Variablen von Lokalen unterscheiden kann, aber bei Python ist das unsinnig, da man hier bei Attributen immer das Objekt referenzieren muss. Die Verwechslungsgefahr besteht also gar nicht.

Bist Du sicher dass Du Klassen brauchst? Und da dann auch noch Klassenattribute?

Edit: Eine Klasse pro Datei ist in Python auch absolut unüblich, denn das bedeutet eine Klasse pro Modul. Und dann bräuchte man eigentlich keine Module.
Antworten