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 님, 중복 질문 기능이 꽤 유용합니다. 내 답변이 정확하지 않은 이유가 있습니까?
Sheena

다른 질문이이 질문과 중복으로 속이기 위해 답변을 수락 할 필요는 없습니다.
user2357112는 Monica April

답변:


237

Object클래스가 아닌 모듈 이기 때문에 오류가 발생 합니다. 그래서 당신의 상속은 까다 롭습니다.

수입 명세서를 다음과 같이 변경하십시오.

from Object import ClassName

클래스 정의 :

class Visitor(ClassName):

또는

클래스 정의를 다음과 같이 변경하십시오.

class Visitor(Object.ClassName):
   etc

ClassName완전히 생략하면 동일하게 작동 합니까? 처럼 class Visitor()?
VMAtm

1
@VMAtm : 시도해 보지 않겠습니까? 파이썬에는 통역사가 있습니다. 빠른 실험에 적합
Sheena

2
천재. 세계에서 최악의 오류 라인. 수업이 아닌 모듈을 사용하고 있다는 것을 알기 위해 3 시간이 걸렸습니다. # $ % ^ $ % & $ % &
Mickey Perlstein

Java 사용자에게이를 더 명확하게하기 위해 파일은 Object이고 클래스는 ClassName입니다. 파이썬에서 파일은 모듈이고 파일 내부의 클래스 정의는 클래스입니다.
켈리 뱅

6

@Mickey Perlstein의 답변과 그의 3 시간의 탐정 작업 후에도 이것을 내 자신의 혼란에 적용하는 데 몇 분이 더 걸렸습니다. 다른 사람이 나와 같고 조금 더 도움이 필요한 경우 내 상황에서 무슨 일이 있었는지 여기에 있습니다.

  • 응답은 모듈입니다
  • 응답은 응답 모듈 내의 기본 클래스입니다
  • 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 수집 오류 ____________________

pyexample.responses에서 test_geojson.py:2 : in (모듈) import GeoJsonResponse .. \ pyexample \ responses \ GeoJsonResponse.py : 12 : in (모듈)

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의 대답은 끝났습니다. 내 상황에서 모든 것을 하나로 묶는 데 잠시 시간이 걸렸습니다.

모듈 을 가져오고있었습니다 .

from pyexample.responses import Response

클래스를 가져와야 할 때 :

from pyexample.responses.Response import Response

이것이 누군가를 돕기를 바랍니다. (내 방어에서는 여전히 초기 단계입니다.)


이것은 질문과 어떻게 관련이 있습니까?
Leevi L

3

Python 3.6.1에서 다음을 수행 할 수도 있습니다.

from Object import Object as Parent

클래스 정의 :

class Visitor(Parent):

2
from Object import Object

또는

From Class_Name import Class_name

Object가 .py파일 인 경우


0

문제가있는 경우 클래스를 확장하려고 할 때 모듈을 참조하고있었습니다.

import logging
class UserdefinedLogging(logging):

설명서 정보를 보면 "로깅"이 모듈로 표시됩니다.

이 특정 경우 로깅에 대한 추가 클래스를 작성하기 위해 로깅 모듈을 상속해야했습니다.


이것은 답변이 아닌 의견으로 인정 될 수 있습니다. 문제가 해결 될 것으로 생각되는 경우에만 답변하십시오.
Hamza Khurshid

미안합니다. 나는 stackoverflow를 적극적으로 사용하는 것에 익숙하지 않으며 사이트의 네티켓에 익숙하지 않습니다.
Gerardsson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.