title: Simple but too many positional arguments for method call
body: <ol>
  <li><p>Would anyone explain why the <code>TypeError</code> is </p>
  
  <blockquote>
    <p>fib() takes 1 positional argument but 2 were given`</p>
  </blockquote>
  
  <p>when I'm only giving it ONE argument => <code>self.fib(self.n - 1)</code> !</p></li>
  <li><p>Also, while keeping the instantiation of the class, can you suggest your solution to fix this? </p></li>
  <li><p>I feel the "self" is being used too much, especially with the more methods I add. Can that be improved?</p></li>
  </ol>
  
  <p>Just trying to wrap my head around some basics! All feedback is appreciated.</p>
  
  <pre><code>class math_func:
      def __init__(self, n: "int" = 6, output: "list" = []):
          self.n = n
          self.output = output
  
      def fib(self):
          print("Current output is:", self.output)
          if self.n == 0:
              return self.output
          else:
              if len(self.output) &lt; 2:
                  self.output.append(1)
                  self.fib(self.n - 1)
              else:
                  last = self.output[-1]
                  second_last = self.output[-2]
                  self.output.append(last + second_last)
                  self.fib(self.n - 1)
              return self.output
  
  first_func = math_func(n=9)
  print(first_func.fib())
  </code></pre>