OOP:mehrfache Vererbung:module.__init__() takes at most 2 ar

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
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Hallo,

Ich habe noch ein kleines Problem mit der Klassenhierarchie. Hab einige Postings gelesen und rumprobiert, komm aber trotzdem nicht weiter.

Ich habe in separaten Dateien, check_mod.py und run_mod.py, die Klassen Check und Run definiert. Dann mach ich eine Subklasse, die von beiden erbt:

Code: Alles auswählen

import Check, Run

class Action(Check, Run):
    def __init__(self):
        Check.__init__(self)
        Run.__init__(self)

    def __init__(self, num, msg):
        self.num = num
        self.msg = msg
Und bekomme blöderweise die Meldung 'module.__init__() takes at most 2 arguments (3 given)' Und da ich nirgendwo 3 arg vergeben habe, kann ich damit auch nichts anfangen. Könnte mir jemand meinen Fehler (der möglicherweise auch mit einem Verständnisfehler verbunden ist) zeigen?

Danke euch schon im voraus :)

VG, ivka_sto
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Du kannst Klassen nur aus Modulen importieren. So wie es ausschaut, importierst du Module und versuchst, von einem Modul zu erben - das ist sicherlich nicht so gemeint, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Hi,

Nein. Die Module sind check_mod.py und run_mod.py (wo die Klassen Check und Run definiert sind). Ich kann sie ohne weiteres importieren, oder? Oder soll es heißen from check_mod import Check?
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

probiers doch aus....
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ivka_sto hat geschrieben:Nein. Die Module sind check_mod.py und run_mod.py (wo die Klassen Check und Run definiert sind). Ich kann sie ohne weiteres importieren, oder? Oder soll es heißen from check_mod import Check?
Nein. Probiers im Interpreter aus.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Mach ich doch schon den ganzen Morgen. Ist echt nicht mein erster Gedanke sofort in den Forum zu posten, wenn mal was nicht läuft.
Im Interpreter bekomm ich ne Fehlermeldung für "from run_mod import Run" (no module called run_mod) und keine Fehlermeldung für import Run (das ist der Name der Klasse). Da liegt doch die Schlußfolgerung nahe, daß man das genau so im Code eingeben soll ..
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ivka_sto hat geschrieben:Mach ich doch schon den ganzen Morgen. Ist echt nicht mein erster Gedanke sofort in den Forum zu posten, wenn mal was nicht läuft.
Im Interpreter bekomm ich ne Fehlermeldung für "from run_mod import Run" (no module called run_mod) und keine Fehlermeldung für import Run (das ist der Name der Klasse). Da liegt doch die Schlußfolgerung nahe, daß man das genau so im Code eingeben soll ..
Dann machst du irgendwas falsch, warscheinlich heißen deine Module nicht so. Du kannst doch logischerweise nicht die Klasse direkt importieren - wo sollte sie denn hergenommen werden wenn zwei Module die gleiche Klassen enthalten?

Mach mal ein ``type(Run)``, was gibt das aus?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

<type 'classobj'>
Aprilia
User
Beiträge: 50
Registriert: Dienstag 15. April 2008, 12:09
Wohnort: Görlitz (östlichste stadt Dtl's)

starte den Computer mal neu....
kann sein das es daran liegt !!!!

lg
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

ivka_sto hat geschrieben:<type 'classobj'>
Kann es sein, dass du einen Interpreter nutzt, wo ``Run`` schon vorher importiert wurde? Hast du es mal mit einer frischen interpreter-Session probiert? Achja, räum am besten alle rumliegenden pyc-Dateien weg.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Aprilia
User
Beiträge: 50
Registriert: Dienstag 15. April 2008, 12:09
Wohnort: Görlitz (östlichste stadt Dtl's)

Leonidas hat geschrieben:
ivka_sto hat geschrieben:<type 'classobj'>
Kann es sein, dass du einen Interpreter nutzt, wo ``Run`` schon vorher importiert wurde? Hast du es mal mit einer frischen interpreter-Session probiert? Achja, räum am besten alle rumliegenden pyc-Dateien weg.

was hat das für einen sinn???
wozu????
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Ja .. ich wollte mich gerade öffentlich für doof erklären, da es auf einmal geklappt hat, doch als ich ne neue Interpreter-Session gestartet habe und aufgeräumt habe, klappt es wieder nicht:
"ImportError: No module named run"
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Aprilia hat geschrieben:was hat das für einen sinn???
wozu????
Was hat Computer neustarten für einen Sinn? Neustarten heißt meist: ich habe keine Ahnung, lasst uns hoffen das sich auf magische Weise behebt. Dein Post war in dieser Hinsicht absolut nicht hilfreich.
ivka_sto hat geschrieben:Ja .. ich wollte mich gerade öffentlich für doof erklären, da es auf einmal geklappt hat, doch als ich ne neue Interpreter-Session gestartet habe und aufgeräumt habe, klappt es wieder nicht:
"ImportError: No module named run"
Ich dachte das Modul heißt ``mod_run``?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Das hab ich gerade mit weggeräumt. Und die Module run und check da gelassen, die die Klassen Run und Check drin haben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Und du bist mit dem Interpreter im gleichen Ordner bzw die Module sind über ``sys.path`` auffindbar?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
keppla
User
Beiträge: 483
Registriert: Montag 31. Oktober 2005, 00:12

Aprilia hat geschrieben:was hat das für einen sinn???
wozu????
pyc sind der compilierte Bytecode, py ist der sourcecode. Die pyc werden vom interpreter genutzt, ohne dass die py-dateien neu ausgewertet werden, wenn der interpreter "glaubt" dass sich seitdem nichts geändert hat (test des änderungsdatum, glaube ich).
Wenn der Interpreter aus irgendeinem Grund glaubt, es habe sich nichts geändert, so würde das dazu führen, dass eine veraltete Version des Programmes ausgeführt wird.

Ich kann mir keine (realistische) Situation vorstellen, wo ein Neustart des Rechners bei Problemen mit dem Pythoninterpreter hilft.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Aprilia hat geschrieben:starte den Computer mal neu....
kann sein das es daran liegt !!!!
sechsrad, bist du das?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
ivka_sto
User
Beiträge: 63
Registriert: Dienstag 11. Dezember 2007, 23:13

Uff, doch, im sys.path war der Fehler. Hab ich jetzt richtig und es klappt, danke für die Hilfe.

VG, ivka_sto
Antworten