it-source

오류: 모듈을 입력합니다.__init__()는 최대 2개의 인수를 사용합니다(3개가 주어짐).

criticalcode 2023. 5. 21. 11:37
반응형

오류: 모듈을 입력합니다.__init__()는 최대 2개의 인수를 사용합니다(3개가 주어짐).

는 다음파서클정의다라는 이름의 했습니다.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

내가 뭘 잘못하고 있는 거지?

는 당의오다같습다니과음 때문에 발생하고 있습니다.Object클래스가 아닌 모듈입니다.그래서 당신의 유산은 엉망입니다.

가져오기 문을 다음으로 변경합니다.

from Object import ClassName

클래스 정의는 다음과 같습니다.

class Visitor(ClassName):

또는

클래스 정의를 다음으로 변경합니다.

class Visitor(Object.ClassName):
   etc

@Mickey Perlstein의 대답과 3시간 동안의 탐정 작업 후에도, 저는 여전히 이것을 제 엉망진창에 적용하는 데 몇 분이 더 걸렸습니다.다른 사람들이 저와 같아서 조금 더 도움이 필요할 경우, 제 상황은 이렇습니다.

  • 응답은 모듈입니다.
  • 응답이 응답 모듈 내의 기본 클래스입니다.
  • GeoJsonResponse는 Response에서 파생된 새로운 클래스입니다.

초기 GeoJson 응답 클래스:

from pyexample.responses import Response

class GeoJsonResponse(Response):

    def __init__(self, geo_json_data):

괜찮아 보입니다.디버깅을 시도하기 전까지는 문제가 없습니다. 다음과 같은 모호한 오류 메시지가 많이 표시됩니다.

pyexample.respons에서 GeoJsonResponse를 가져옵니다.\py 예제\description\GeoJson 응답.py:12: (모듈) 클래스 GeoJson 응답(응답):

E TypeError: module()은 최대 2개의 인수를 사용합니다(3개 지정).

오류 ====================================

________________ 테스트/테스트_geojson을 수집하는 중 오류가 발생했습니다.py _________________________________________

test_geojson.py:2: pyexample.responses에서 (모듈) GeoJsonResponse 가져오기.\pyexample\response \GeoJsonResponse.py:12:in(수직)

클래스 GeoJson 응답(응답):E TypeError: module()은 최대 2개의 인수를 사용합니다(3개 지정).

오류: 찾을 수 없습니다. \PyExample\tests\test_geojson.py::TestGeoJson::test_api_response

C:\Python37\lib\site-packages\aenum__init_.py:163

(no name 'PyExample\tests\test_geojson.py::TestGeoJson::test_api_response'([] 중 하나)

오류들은 저를 올바른 방향으로 가리키기 위해 최선을 다하고 있었고, @Mickey Perlstein의 대답은 완전히 틀렸습니다. 제가 이 모든 것을 제 자신의 맥락에서 정리하는 데 몇 분이 걸렸습니다.

모듈을 가져오는 중이었습니다.

from pyexample.responses import Response

클래스를 가져올 때:

from pyexample.responses.Response import Response

이것이 누군가에게 도움이 되기를 바랍니다.(제가 보기에, 아직 꽤 이른 시기입니다.)

from Object import Object

또는

From Class_Name import Class_name

가 체가인인 .pyjava.

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

from Object import Object as Parent

클래스 정의는 다음과 같습니다.

class Visitor(Parent):

기본이 있는 import

와 같은 이 파이썬이할 것으로 예상하기 합니다 - 을 딴 의 "됩니다. 소스 파일은 파일의 이름을 딴 정확히 하나의 "퍼블릭" 클래스를 포함할 것으로 예상됩니다.import클래스에 대한 액세스를 제공합니다.

Python은 Java가 아닙니다.Python에는 액세스 수식자 키워드가 없습니다. 소스 파일에 임의의 수의 클래스(0 포함)를 넣을 수 있습니다. 코드의 최상위 수준에 있는 클래스 이외의 다른 것도 허용합니다. 소스 파일과 이름을 공유하는 클래스에 대한 특별한 동작은 없습니다.

같은 import Object성공했다는 는 다음을 의미합니다.Object클래스가 아닌 모듈의 이름이 됩니다.Python은 모듈과 이름이 같더라도 여기서 어떤 클래스도 특별하게 취급하지 않습니다.가상의 클래스Object에의된정에 .Object.py가 될 것입니다Object 의 속성Object 모듈::Object.Object.

모듈은 클래스가 아니므로 기본 클래스로 적합하지 않습니다.

만약 그것이Object은 " "를 합니다.Object클래스, 기본 클래스로 사용하려면 다음 중 하나를 선택합니다.

  • 다음과 같은 자격을 갖춘 이름으로 참조하십시오.

    import Object
    
    class Visitor(Object.Object):
        pass
    
  • 명시적으로 별칭 지정:

    import Object
    
    my_object = Object.Object
    class Visitor(my_object):
        pass
    
  • 사용하다from ... import원하는 이름에 클래스를 직접 할당하는 구문:

    from Object import Object
    
    class Visitor(Object):
        pass
    

    또는 별칭을 지정하여 사용합니다.as:

    from Object import Object as my_object
    
    class Visitor(my_object):
        pass
    

그러나 후자의 구문은 주의해야 합니다.

from ... import

다음과 같은 모양의 가져오기의 경우from x.y import z가능성이 : 가 지 가 능 있 습 니 다 이 두 성 니 다 있 습 ▁there 두 :

  • x패지입다니입니다.y는 해당 이며, "는 " " " 입니다.z이 모듈의 일부 속성입니다(다시 말하지만 클래스는 특별하지 않습니다;z정수와 같은 임의의 값일 수 있습니다. 즉, 모듈의 최상위 수준에서 코드를 실행한 후 남은 전역 변수입니다.

  • x패지입다니입니다.y패키지의 이며, 해당패패입지니다키하위의입니다.z해당 하위 패키지의 모듈입니다.

(Python은 패키지를 일종의 모듈로 표현하기 때문에 정말 한 가지 차이점이 있습니다: 그것이 존재하는지 여부.import에드from지정된 패키지/패키지는 모듈 또는 그 구성요소이기도 합니다.)

물론 어떤 결과가 발생하는지는 패키지의 내용물이 무엇인지에 따라 달라지며, 어떤 결과는 어디에 따라 달라질 수 있습니다. x발견되었습니다.공통 이름을 재사용하는 패키지, 하위 패키지, 모듈 및 속성이 있으면 혼동 가능성이 크게 증가합니다. (불행히도 Python 표준 라이브러리는 특히 날짜 시간을 사용하여 이 작업을 수행합니다.)

를 들어, 를들어진, 어주예가 ,x.py그리고.y.py 디렉터리에 동한디리서에서, 에어디토.x.py는 을 합니다.x수업, 누군가는 쓸지도 모릅니다.from x import x에 시대에y.py코드, 이것이 클래스를 의미할 것으로 예상합니다. 이 디렉토리이 "한 디렉토리"로 지정되는에는 "동일한 디렉토리"로 지정됩니다.x상위 디렉토리가 절대 가져오기를 검색하는 경로인 경우from x import x모듈을 의미합니다(에서 생성됨).x.py 파일, 파일, 가져온 파일from▁▁package▁▁the을x폴더)를 선택합니다.

패키지 루트가 모듈 검색 경로에 있는 한, 상대 가져오기를 사용하여 문제를 쉽게 피할 수 있습니다.예제 계속하기, 의y.py,from .x import x는 클래스를 명하게클의미며하를래스확,,며의,from . import x모호하지 않음은 형제 모듈을 의미합니다.우리는 다음의 내용에 대해 추론할 필요가 없습니다.sys.path이 될 합니다.import: 행경(우)sys.path코드를 작성할 때 상대 경로를 포함합니다. 코드가 제대로 실행되는지만 확인하면 됩니다.y모듈이 그것을 얻습니다.__package__적절히 설정).

이 특정 오류 메시지가 표시되는 이유는 무엇입니까?

저는 "그래서 당신의 상속은 엉망입니다"라는 주장에 약간의 세부사항을 추가하고 싶습니다.

이 문제는 코드가 형식이 아닌 기본 클래스로 사용하려고 하기 때문에 발생합니다.Python에서 클래스는 그 자체로 객체이며 모든 객체에는 어떤 유형(즉, 인스턴스인 클래스)이 있습니다.

Python에 때 일 반 호 을class정의, 그것은 내용을 수집하고 내장된 것에 전화를 걸 것입니다.type (, 생에대한출라자성수호▁ofor)의 것.type클래스, 클래스의 기본 유형(자체 포함)을 정의하는 클래스입니다.세 즉 클래스 이름을 문자열로 사용합니다(여기서는'Visitor'), 새 클래스에 대한 기본 클래스의 튜플(여기서는(Object,)으로)과 새 클래스에 본문 에 정의된 변수를 하고 즉, ▁things클▁i,utes▁to▁and▁special▁for▁module▁a▁set▁a▁the▁like▁of▁attriblethatary,▁(),,▁diction즉다▁class▁the▁itself▁all추같특▁new포것음▁in,▁tup'__module__'그리고.'__qualname__').

그러나대한 통화는 하드 코딩되지 않습니다.대신 Python은 사용할 메타 클래스를 파악하기 위해 베이스의 유형을 찾습니다.type하나의 메타 클래스만 가능합니다.이를 통해 Python은 파생 클래스가 기본 클래스와 동일한 메타 클래스를 갖도록 보장합니다.

은 python의 유형을 합니다.Object모듈임을 확인합니다.따라서, 새로운 유형을 만들려고 시도하는 대신, 이름이 지정되었습니다.Visitor,와 함께Object그것의 기초로서, 그것은 새로운 모듈을 만들려고 시도할 것이다, 그것을 위한 생성자를 사용합니다.module).type(기본 제공 항목으로 지정되지 않음).

이 경우 생성자는 문서화되지 않습니다(모듈 개체는 다음 사용자에 의해서만 생성됩니다).import 사용하는 하나 두 개의합니다. 새 값(의 시스템, , )입니다.__doc__- 으로 유형 되지 . 속성)이어야 합니다. - 부으로유않검습다니형사지되수적▁attribute. 문자열이거나None그러나:

>>> import sys
>>> module = type(sys) # expose the type name
>>> example = module('example', [1, 2, 3])
>>> example.__doc__
[1, 2, 3]

(에 의해 되겠지만)help(example)문자열이 아닌 경우.)

마찬가지로, 우리가 다른 것들로부터 물려받으려 한다면,

>>> class example(0): pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: int() takes at most 2 arguments (3 given)
>>> class example(()): pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: tuple expected at most 1 argument, got 3

생성자에 대해 세 개의 인수를 허용하는 유형의 개체를 시도하면 오류는 더 뒤로 밀려납니다.

>>> # 'example' is passed as a buffer to decode,
>>> # ('test',) is passed as an encoding,
>>> # and some dictionary is passed as the error-handling policy.
>>> # All of these values are clearly nonsensical.
>>> class example('test'): pass
... 
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: str() argument 2 must be str, not tuple

문제가 있었던 저의 경우 수업을 연장하려고 할 때 모듈을 언급했습니다.

import logging
class UserdefinedLogging(logging):

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

이 경우 로깅을 위한 추가 클래스를 만들기 위해 로깅 모듈을 상속해야 했습니다.

언급URL : https://stackoverflow.com/questions/14583761/typeerror-module-init-takes-at-most-2-arguments-3-given

반응형