Ich versuche, eine Klasse zu schreiben, die von mmap erbt wie folgt:Warum hat mein __init__ in der Vererbung keinen Vorrang?
from mmap import mmap
class SBFMap(mmap):
def __init__(self, filename):
f=open(filename, 'rb')
fn = f.fileno()
super().__init__(fn, 0, access = mmap.ACCESS_READ)
Wie Sie sich vorstellen können, ein Teil der Funktionalität meiner Klasse ist die Datei zum Öffnen/Schließen in meinem __init__ zu verstecken. Ich versuche dann, wie so ein SBFMap Objekt zu erhalten:
from SBFMap import SBFMap
filename = "name\of\file"
mymap = SBFMap(filename)
ich diesen Fehler:
File "SBFReader.py", line 22 in <module> main()
File "SBFReader.py", line 7, in main mymap=SBFMap(filename)
TypeError: an integer is required (got type str)
Press any key to continue . . .
Es ist wie anstelle von Python erscheint SBFMap der __init__ Aufruf und ließ mich Mmap des __init__ rufen, wenn ich bereit bin zu, versucht Python, mmap __init__ aufzurufen. Wie behebe ich das?
ist das ein Tippfehler? 'f = open (Dateiname, 'rb)' Bitte kopieren Sie auch den kompletten Stacktrace. – Markon
Zwei mögliche Lösungen: Verwenden Sie Delegierung statt Vererbung. Und für einige Klassen, z.B. str oder datetime, Sie können __init__ nicht überladen. Ich habe die genauen Details vergessen, aber Sie können stattdessen "__new__" versuchen. – deets
@Markon Ja, das war ein Tippfehler, der jetzt behoben ist. Ich habe auch den Stack-Trace hinzugefügt. –