- Modul.__init__() dauert höchstens 2 Argumenten Fehler in Python
Habe ich 3 Dateien, factory_imagenet.py, imdb.py und imagenet.py
factory_imagenet.py hat:
import datasets.imagenet
Es hat auch eine Funktion aufrufen, die als
datasets.imagenet.imagenet(split,devkit_path))
...
imdb.py hat:
class imdb(object):
def __init__(self, name):
self._name = name
...
imagenet.py hat:
import datasets
import datasets.imagenet
import datasets.imdb
Es hat auch
class imagenet(datasets.imdb):
def __init__(self, image_set, devkit_path=None):
datasets.imdb.__init__(self, image_set)
Alle drei Dateien sind in dem Ordner datasets.
Wenn ich auf der anderen Skript, das interagiert mit diesen Dateien, ich bekomme diese Fehlermeldung:
Traceback (most recent call last):
File "./tools/train_faster_rcnn_alt_opt.py", line 19, in <module>
from datasets.factory_imagenet import get_imdb
File "/mnt/data2/abhishek/py-faster-rcnn/tools/../lib/datasets/factory_imagenet.py", line 12, in <module>
import datasets.imagenet
File "/mnt/data2/abhishek/py-faster-rcnn/tools/../lib/datasets/imagenet.py", line 21, in <module>
class imagenet(datasets.imdb):
TypeError: Error when calling the metaclass bases
module.__init__() takes at most 2 arguments (3 given)
Was ist hier das problem und was ist die intuitive Erklärung, wie man zur Lösung solcher Vererbung Probleme?
datasets.imdb
ist ein Modul, nicht etwas zu verwenden, als Basis-Klasse.So wie löse ich dieses?
entfernen
(datasets.imdb)
?InformationsquelleAutor London guy | 2016-08-31
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies bedeutet, dass Sie versuchen, zu Erben von einem Modul, nicht von der a-Klasse. In der Tat
datasets.imdb
ist ein Modul;datasets.imdb.imdb
ist Klasse.Müssen Sie den code ändern, so dass es wie folgt aussieht:
aktualisierte Antwort
Perfekt, bravo. Läuft jetzt ! Akzeptiert Antworten in 5 Minuten !
Können Sie empfehlen eine gute Lesen, um zu verstehen, diese Aspekte der Module, Objekte und Vererbung in Python bitte?
InformationsquelleAutor Andrea Corbellini
Hier ist eine andere mögliche Ursache...
Wenn Sie eine
__init__.py
- Datei, stellen Sie sicher, dass Sie den import der super-Klasse, bevor die abgeleitete lieben.Hier ist der FALSCHE Weg, es zu tun:
Oben wird eine Fehlermeldung zu geben:
Jedoch dies funktionieren wird:
Beispielsweise die Datei InheritedA.py könnte sein:
InformationsquelleAutor MattClimbs
Beim Aufruf
datasets.imdb.__init__(self, image_set)
Ihre
imdb.__init__
Methode bekommt 3 Argumente. Zwei, die Sie senden, und drittens ist die impliziteself
InformationsquelleAutor Darth Kotik