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.