TypeError:module .__ init __()は最大で2つの引数を取ります(3つ指定)


147

という名前のファイルでクラスを定義しましたObject.py。別のファイルのこのクラスから継承しようとすると、コンストラクターを呼び出すと例外がスローされます。

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

これは私のコードです:

import Object

class Visitor(Object):
    pass

instance = Visitor()  # this line throws the exception

何が悪いのですか?


1
提供された回答を選択してください。それは正しいようで、他の質問をあなたの疑惑として締めくくることができます。
Mad Physicist

1
ちょっと@wakamdr質問の重複機能はかなり便利です。私の答えが正しくない理由はありますか?
シーナ2017

他の質問がこの質問の複製として重複クローズされるために、回答を受け入れる必要はありません。
user2357112は2018

回答:


237

Objectクラスではなくモジュールであるため、エラーが発生しています。だからあなたの相続は愚かです。

インポートステートメントを次のように変更します。

from Object import ClassName

そしてあなたのクラス定義は:

class Visitor(ClassName):

または

クラス定義を次のように変更します。

class Visitor(Object.ClassName):
   etc

ClassName完全に省略しても、同じように動作しますか?好きclass Visitor()
VMAtm 2017年

1
@VMAtm:試してみてください。Pythonの素晴らしいcosにはインタプリタがあります。迅速な実験に
最適

2
天才。世界で最悪のエラーライン。クラスではなくモジュールを使用していることを理解するのに3時間かかりました。#$%^ $%&$%&
ミッキーペルスタイン2018

これをJavaユーザーにわかりやすくするために、ファイルはObjectで、クラスはClassNameです。Pythonでは、ファイルはモジュールであり、ファイル内のクラス定義はクラスです。
ケリーバン

6

@Mickey Perlsteinの答えと彼の3時間の探偵の仕事の後でも、これを自分の混乱に適用するのにまだ数分かかりました。他の誰かが私のようなもので、もう少し助けが必要な場合、私の状況でこれが起こっていました。

  • 応答はモジュールです
  • Responseは応答モジュール内の基本クラスです
  • GeoJsonResponseはResponseから派生した新しいクラスです

最初のGeoJsonResponseクラス:

from pyexample.responses import Response

class GeoJsonResponse(Response):

    def __init__(self, geo_json_data):

元気そうです。問題をデバッグしようとするまで問題はありません。つまり、次のような漠然としたエラーメッセージがたくさん表示されます。

pyexample.responsesからのインポートGeoJsonResponse .. \ pyexample \ responses \ GeoJsonResponse.py:12:(モジュール)クラスGeoJsonResponse(Response):

E TypeError:module()は最大で2つの引数を取ります(3つが与えられます)

===================================エラー============== ======================

___________________テストの収集エラー/test_geojson.py ____________________

test_geojson.py:2:in(module)from pyexample.responses import GeoJsonResponse .. \ pyexample \ responses \ GeoJsonResponse.py:12:in(module)

クラスGeoJsonResponse(Response):E TypeError:module()は最大で2つの引数を取ります(3つ指定)

エラー:見つかりません:\ PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response

C:\ Python37 \ lib \ site-packages \ aenum__init __。py:163

([]のいずれにも名前「PyExample \ tests \ test_geojson.py :: TestGeoJson :: test_api_response」はありません)

エラーは私を正しい方向に向けるために最善を尽くしていて、@ Mickey Perlsteinの答えは無理でした、それをすべて自分のコンテキストにまとめるのに1分かかりました:

私はモジュールをインポートしていました:

from pyexample.responses import Response

クラスをインポートしているはずだったとき:

from pyexample.responses.Response import Response

これが誰かを助けることを願っています。(私の弁護では、それはまだかなり早いです。)


これは質問とどのように関連していますか?
Leevi L


2
from Object import Object

または

From Class_Name import Class_name

オブジェクトが.pyファイルの場合。


0

問題があった私の場合、クラスを拡張しようとしたときにモジュールを参照していました。

import logging
class UserdefinedLogging(logging):

ドキュメンテーション情報を見ると、「ログ」がモジュールとして表示されていることがわかります。

この特定のケースでは、ロギング用の追加のクラスを作成するために、ロギングモジュールを単純に継承する必要がありました。


これは、回答ではなくコメントとみなすことができます。問題が解決すると思われる場合のみ回答してください。
Hamza Khurshid

申し訳ありません。私はStackoverflowを積極的に使用するのが初めてで、サイトのネチケットにはあまり詳しくありません。
ジェラルドソン
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.