>source

유료 온라인 강좌를 통해 파이썬을 공부하고 있는데 모듈과 패키지를 공부하다가 다음과 같은 코드를 입력하면 오류가 발생했습니다.

class Fibonacci:
    def __init__(self, title="fibonacci"):
        self.title = title
    def fib(n):
        a, b = 0, 1
        while a < n:
            print(a, end=' ')
            a, b = b, a + b
        print()
    def fib2(n):
        result = []
        a, b = 0, 1
        while a < n:
            result.append(a)
            a, b = b, a + b
        return result

그리고 def는 "def Method should have"self "as first argument"와 같은 오류를 표시합니다. 내가 왜 오류가 발생하는지 아십니까? 내 코드는 괜찮을 것 같고, 친구 노트북 (창)을 통해 실행하려고하면 잘 작동합니다. 저는 mac os를 사용하고 있습니다. 죄송합니다 저는 파이썬을 처음 접했습니다 .. :)여기에서 오류를 보려면 클릭하십시오.

----- 수정 됨 ----------------- 의견 주셔서 감사합니다! 그리고 나는 그림처럼 편집했습니다편집 된 코드 오류가 없습니다! :)

하지만 함수를 호출하려고하면 TypeError : fib ()와 같은 오류가 발생합니다. 1 개의 필수 위치 인수가 없습니다 : 'n'

from pkg.fibonacci import Fibonacci
Fibonacci.fib(100)

참조에러 메시지 오류 메시지 2

  • 답변 # 1

    이는 클래스 내의 모든 함수에 다음과 같은 이름의 인수가 있어야하기 때문입니다. self 함수를 클래스에 바인딩하려는 경우.

    self 클래스의 인스턴스를 나타냅니다. 사용하여 self 키워드 우리는 파이썬에서 클래스의 속성과 메소드에 접근 할 수 있습니다. 주어진 인수로 속성을 바인딩합니다.

    이 시도

    class Fibonacci:
      def __init__(self, title="fibonacci"):
        self.title = title
      def fib(self,n):
        a, b = 0, 1
        while a < n:
            print(a, end=' ')
            a, b = b, a + b
        print()
      def fib2(self,n):
        result = []
        a, b = 0, 1
        while a < n:
            result.append(a)
            a, b = b, a + b
        return result
    
    

    Python 클래스에서 Self 참조

    편집하다:

    다른 질문에 답하기

    클래스 함수를 호출하는 동안 객체를 사용해야합니다. 따라서 함수를 호출하기 전에 객체를 정의해야합니다.

    이렇게

    from pkg.fibonacci import Fibonacci
    f = Fibonacci()
    f.fib(100)
    
    

  • 답변 # 2

    오류 라기보다는 경고 일 가능성이 높습니다. 그리고 경고는 당신이 클래스의 일부로 메소드를 선언하고 있지만 실제로는 어떤 객체에도 바인딩되지 않는다는 것입니다. 의도적으로 수행하는 경우 정적 메서드를 사용해야합니다.

    따라서 계속해서 추가 할 수 있습니다. self 같은 두 기능 모두 다른 답변에서 제안되었거나 정적 방법을 사용할 수 있습니다.

    class Fibonacci:
        def __init__(self, title="fibonacci"):
            self.title = title
        @staticmethod
        def fib(n):
            a, b = 0, 1
            while a < n:
                print(a, end=' ')
                a, b = b, a + b
            print()
        @staticmethod
        def fib2(n):
            result = []
            a, b = 0, 1
            while a < n:
                result.append(a)
                a, b = b, a + b
            return result
    
    

  • 답변 # 3

    fib/fib2가 클래스 메소드인지 확실하지 않습니다.

    그렇다면 object 매개 변수에 self를 추가 할 수 있습니다.

    def fib(self, n)
    
    

    그런 다음 다음과 같은 메서드를 호출 할 수 있습니다.

    f = Fibonacci()
    f.fib(5)
    
    

    self 매개 변수는 클래스 객체를 참조하므로 클래스 메소드에서 self 속성을 사용할 수 있습니다.

    def fib(self, n):
            a, b = 0, 1
            while a < n:
                print(a, end=' ')
                a, b = b, a + b
            print()
            print(self.title)
    
    

관련 자료

  • 이전 ruby on rails - Stripe Connect 온 보딩 제한 국가? ( '호주'로 고정)
  • 다음 java - 반복되는 방법을 단순화하는 다른 방법을 만드는 것이 가치가 있습니까?