오류: 모듈을 입력합니다.__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
가 체가인인 .py
java.
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
'it-source' 카테고리의 다른 글
PowerShell에서 경로 다시 로드 (0) | 2023.05.21 |
---|---|
MVC 레이저 마크업에서 쿼리 문자열 매개 변수를 가져오는 방법은 무엇입니까? (0) | 2023.05.21 |
다중 IP 주소로 mongod.conf bind_ip을 설정하는 방법 (0) | 2023.05.21 |
CSS(jQuery SVG image replacement)를 사용하여 SVG 이미지의 색상을 변경하는 방법은 무엇입니까? (0) | 2023.05.21 |
wpf 데이터 그리드 및 추가 UI 요소가 있는 스크롤 뷰어에서 마우스 스크롤이 작동하지 않음 (0) | 2023.05.21 |