bestsource

유형 오류: worker()는 0개의 위치 인수를 사용하지만 1개가 지정되었습니다.

bestsource 2023. 5. 24. 22:17
반응형

유형 오류: 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

반응형