title: Why is this class using "self" as a positional argument?
body: <p>I wrote the following code to add a Listing to the <code>Marketplace</code> class, but it throws an error saying that <code>.add_listing(</code>) is missing one positional argument, while <code>add_listing</code> takes <code>self</code> and <code>new_listing</code> as arguments. I tried removing <code>self</code> to see what happened, and it threw another error. </p>
  
  <p>Take a look:</p>
  
  <pre><code>class Marketplace:
      def __init__(self):
          self.listings = []
      def add_listing(self, new_listing):
          self.listings.append(new_listing)
      def remove_listing(self, listing):
          self.listings.remove(listing)
      def show_listings(self):
          for listing in self.listings:
              print(listing)
  
  class Client:
      def __init__(self, name, location, is_museum):
          self.name = name
          self.location = location
          self.is_museum = is_museum
      def sell_artwork(self, artwork, price):
          if artwork.owner == self:
              listed_artwork = Listing(artwork, price, self)
              veneer.add_listing(listed_artwork)
  
  class Listing:
      def __init__(self, art, price, seller):
          self.art = art
          self.price = price
          self.seller = seller
      def __repr__(self):
          return '{}: {}'.format(self.art.title, str(self.price))
  </code></pre>
  
  <p>When <code>.sell_artwork</code> is called on a <code>Client</code>, it throws this error:<br>
  (<code>veneer</code> is an instance of <code>Marketplace</code> that I am using in this code)</p>
  
  <pre class="lang-none prettyprint-override"><code>Traceback (most recent call last):   File "script.py", line 45, in &lt;module&gt;
    edytta.sell_artwork(girl_with_mandolin, '$6M (USD)')   
      File "script.py", line 30, in sell_artwork
        veneer.add_listing(listed_artwork) 
          TypeError: add_listing() missing 1 required positional argument: 'new_listing'
  </code></pre>