오류: 모듈을 입력합니다.__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
'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 |