2016-08-31 2 views
4
で最も2つの引数エラーで取る

私は、factory_imagenet.py、imdb.pyとimagenet.pyはモジュール.__のinit __()はPython

factory_imagenet.pyは、3つのファイルを持っています

import datasets.imagenet 

datasets.imagenet.imagenet(split,devkit_path)) 
... 

imdb.pyが持っているように、それはまた、関数呼び出しがあります。

class imdb(object): 
def __init__(self, name): 
    self._name = name 
    ... 

imagenet.pyがあります

import datasets 
import datasets.imagenet 
import datasets.imdb 

また、すべての3つのファイルは、データセットのフォルダにある

class imagenet(datasets.imdb): 
    def __init__(self, image_set, devkit_path=None): 
     datasets.imdb.__init__(self, image_set) 

を持っています。

私は、これらのファイルと対話する別のスクリプトを実行しているとき、私はこのエラーを取得:

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) 

ここでの問題は何と、継承の問題を解決する方法に直感的な説明は何ですか?

+0

'datasets.imdb'は**モジュール**です。**基本クラス**として使用するものではありません。 –

+0

これをどうすれば解決できますか? –

+1

'(datasets.imdb)'を削除しますか? –

答えて

15
module.__init__() takes at most 2 arguments (3 given) 

暗黙的です。実際、datasets.imdbはモジュールです。あなたのクラスはdatasets.imdb.imdbです。

あなたは次のように見えるようにコードを変更する必要があり

class imagenet(datasets.imdb.imdb): 
    def __init__(self, image_set, devkit_path=None): 
     datasets.imdb.imdb.__init__(self, image_set) 
+0

どうすれば解決できますか?ファイルを並べ替えるにはどうすればいいですか? –

+1

@AbhishekShivkumar:更新された回答 –

+0

パーフェクト、ブラボー今すぐ実行!5分で答えを受け取ります! –

0

datasets.imdb.__init__(self, image_set)
imdb.__init__メソッドには3つの引数があります。二、あなたは送信し、第三は、これはあなたがいないクラスから、モジュールを継承しようとしていることを意味self

+0

imdbは3つの引数を取るべきですか?それとも、3つの議論を得ていないと言っていますか?彼らは3つの議論を得ていますか?私はただ一つしか渡していません(image_set? –

1

ここでは、別の原因があります...あなたは__init__.pyファイルがある場合

、あなたが前にスーパークラスをインポートすることを確認してください派生したもの

ここでそれを行うには間違った方法だ:

from mymodule.InheritedA import InheritedA 
from mymodule.InheritedB import InheritedB 
from mymodule.Parent import Parent 

上記のエラーを与える:

TypeError: module.__init__() takes at most 2 arguments (3 given) 

しかし、これは動作します:たとえば

from mymodule.Parent import Parent 
from mymodule.InheritedA import InheritedA 
from mymodule.InheritedB import InheritedB 

ファイルInheritedAを.pyは:

from mymodule import Parent 

class InheritedA(Agent): 
    def __init__(self): 
     pass 

    def overridden_method(self): 
     print('overridden!!') 
関連する問題