[Vererbung] Erweiterung einer Klasse der Standardlib
Verfasst: Samstag 16. Mai 2015, 14:04
Hallo allerseits,
ich erweitere gerade das erste Mal eine Klasse der Standardbibliothek und scheitere schon ganz zu Beginn. Vorweg: ich benutze Python 3.4
Mein Codedieser wirft in Zeile 2 folgenden Fehler aus:
Mir ist nicht klar, dass ich in Zeile 2 drei Argumente übergebe? Woher weiß ich, dass das Modul 2 maximal 3 Argumente annimmt (wenn ich es nicht erst von der Fehlermeldung erfahren will) und welche das sind?
Ich habe nur die __init__() der Klasse shlex gefunden, und will ja diese auch mit meiner Codezeile 4 aufrufen:Die Fehlermeldung kann sich aber doch nicht auf die __init__() der Klasse shlex beziehen, denn die hat ja 4 Argumente.
Ihr bemerkt, ich habe Verständnisprobleme: was macht ein Modul mit Argumenten, ich dachte, die Argumente kommen erst bei der __init__()-Methode ins Spiel?
Mir scheint, als ob ich den Unterschied zwischen Modul und Klasse noch nicht verstanden habe, denn in meinen kleinen Tests (zwei Klassen in einer Datei) stoße ich auf dieses Problem nicht, bzw. kann es nicht provozieren (z.B. mit zu vielen Argumenten, das ergibt eine etwas andere Fehlermeldung).
Weiß jemand, wo ich mich diesbezüglich schlau machen kann, ich habe für dieses Problem nichts gefunden?
Kurz fragen möchte ich noch was den Aufruf der __init__() der Basisklasse betrifft: Welche Schreibweise ist die "bessere", "pythonischere", oder ist eine falsch:
Vielen Dank für Eure Hilfe!
Viele Grüße,
Ulrich
ich erweitere gerade das erste Mal eine Klasse der Standardbibliothek und scheitere schon ganz zu Beginn. Vorweg: ich benutze Python 3.4
Mein Code
Code: Alles auswählen
import shlex
class shlexfem(shlex):
def __init__(self, instream=None, infile=None, posix=False):
super().__init__(instream, infile, posix)
pass
Code: Alles auswählen
TypeError: module.__init__() takes at most 2 arguments (3 given)
Ich habe nur die __init__() der Klasse shlex gefunden, und will ja diese auch mit meiner Codezeile 4 aufrufen:
Code: Alles auswählen
class shlex:
"A lexical analyzer class for simple shell-like syntaxes."
def __init__(self, instream=None, infile=None, posix=False):
...
Ihr bemerkt, ich habe Verständnisprobleme: was macht ein Modul mit Argumenten, ich dachte, die Argumente kommen erst bei der __init__()-Methode ins Spiel?
Mir scheint, als ob ich den Unterschied zwischen Modul und Klasse noch nicht verstanden habe, denn in meinen kleinen Tests (zwei Klassen in einer Datei) stoße ich auf dieses Problem nicht, bzw. kann es nicht provozieren (z.B. mit zu vielen Argumenten, das ergibt eine etwas andere Fehlermeldung).
Weiß jemand, wo ich mich diesbezüglich schlau machen kann, ich habe für dieses Problem nichts gefunden?
Kurz fragen möchte ich noch was den Aufruf der __init__() der Basisklasse betrifft: Welche Schreibweise ist die "bessere", "pythonischere", oder ist eine falsch:
Code: Alles auswählen
super().__init__(instream, infile, posix)
# oder
shlex.__init__(self, instream, infile, posix)
Viele Grüße,
Ulrich