유형 오류: worker()는 0개의 위치 인수를 사용하지만 1개가 지정되었습니다.
하위 클래스를 구현하려고 하면 다음 오류가 발생합니다.
TypeError: worker() takes 0 positional arguments but 1 was given
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
def worker():
pass
def DownloadProc(self):
pass
당신의.worker
메소드는 함수가 아닌 클래스 메소드이므로 매개 변수로 '셀프'가 필요합니다.그것을 추가하면 잘 작동할 것입니다.
방법에 필요하지 않은 경우self
인수로, 당신은 다음을 사용할 수 있습니다.@staticmethod
오류를 방지하기 위한 장식자:
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
@staticmethod
def worker():
pass
def DownloadProc(self):
pass
https://docs.python.org/3/library/functions.html#staticmethod 을 참조하십시오.
추가하는 것을 잊었습니다.self
함수의 매개 변수로worker()
학급에서KeyStatisticCollection
.
이는 특히 메서드에 인수를 전달하지 않을 때 혼란스러울 수 있습니다.그래서 뭐가 문제지?
클래스에서 메서드를 호출하는 경우(예:work()
이 경우), Python은 자동으로 첫 번째 인수로 자신을 전달합니다.
다시 한 번 읽어보겠습니다.클래스에서 메서드를 호출하면(이 경우와 같이) Python은 자동으로 첫 번째 인수로 자신을 전달합니다.
그래서 여기서 파이썬은 말합니다. 이봐, 나는 그것을 알 수 있습니다.work()
(괄호 안에 아무것도 없기 때문에) 0개의 위치 인수를 사용하지만 당신은 알고 있습니다.self
메서드가 호출될 때 인수가 여전히 자동으로 전달되고 있습니다.그러니 이걸 고치고 그것을 넣는 게 좋을 겁니다.self
키워드를 다시 입력합니다.
추가 중self
문제를 해결해야 합니다. work(self)
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
def worker(self):
pass
def DownloadProc(self):
pass
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
def worker(self):
pass
def DownloadProc(self):
pass
다음을 사용하여 Python 클래스를 실수로 만들 때마다 이 오류가 발생합니다.def
대신에class
:
def Foo():
def __init__(self, x):
self.x = x
# python thinks we're calling a function Foo which takes 0 args
a = Foo(x)
TypeError: Foo() takes 0 positional arguments but 1 was given
이런!
method_a()라는 이름의 메서드에서 method_a(with_params)라는 동일한 이름의 메서드를 호출하여 재귀를 유발하는지 확인합니다.
def worker에서 self 키워드만 전달합니다. : function
class KeyStatisticCollection(DataDownloadUtilities.DataDownloadCollection):
def GenerateAddressStrings(self):
pass
def worker(self):
pass
def DownloadProc(self):
pass
이 오류의 또 다른 사용 사례는 클래스 정의 내에서 함수를 가져오는 경우입니다.이렇게 하면 후속 함수 호출이 클래스 개체의 일부가 됩니다.이 경우 라이브러리 가져오기 기능에서 @static 메서드를 사용하거나 함수에 직접 정적 경로 호출을 수행할 수 있습니다.아래 예제 참조
이 예에서 "self.bar "은 TypeError를 던지지만 두 가지 방법으로 해결할 수 있습니다.
# in lib.py
def bar():
print('something to do')
# in foo.py
class foo():
from .lib import bar
def __init__(self):
self.bar()
옵션 1:
# in lib.py
def bar():
print('something to do')
# in foo.py
class foo():
from .lib import bar
def __init__(self):
lib.bar()
옵션 2:
# in lib.py:
@staticmethod
def bar():
print('something to do')
# in foo.py
class foo():
from .lib import bar
def __init__(self):
self.bar()
Flask Basic auth를 할 때 이 오류가 발생하여 제가 wrap_view(**kwargs)를 가지고 있다는 것을 알았고 wrap_view(*args, **kwargs)로 변경한 후 작동했습니다.
class KeyStatisticCollection():
def GenerateAddressStrings(self):
pass
def worker():
return blabla
def DownloadProc(self):
abc = self.GenerateAddressStrings()
#abc = GenerateAddressStrings()#error
blabla = worker()
#blabla = self.worker()#error
나는 이것이 self param을 사용하는 것에 대한 더 나은 설명이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/18884782/typeerror-worker-takes-0-positional-arguments-but-1-was-given
'bestsource' 카테고리의 다른 글
Mongodb Aggregation 프레임워크가 맵/축소보다 빠릅니까? (0) | 2023.05.24 |
---|---|
스칼라에서 목록 끝에 요소 추가 (0) | 2023.05.24 |
다차원 배열 [][] vs [,] (0) | 2023.05.24 |
Azure SQL 데이터베이스 자동 확장 (0) | 2023.05.24 |
템플릿 바인딩과 바인딩은 무엇입니까? (0) | 2023.05.24 |