Help with veneer project: AttributeError: type object 'Art' has no attribute 'title'

In the exercise for the Marketplace “Veneer”

I’m getting the following error:

AttributeError: type object ‘Art’ has no attribute ‘title’

but I think Art has this attribute on its constructor as follow:

class Art():
  
  def __init__(self, artist, title, medium, year, owner ):
    self.artist = artist
    self.title = title
    self.medium = medium
    self.year = year
    self.owner = owner

  def __repr__(self):
    return self.artist + ', "'  + self.title + '". ' + str(self.year) +", " + self.medium + ". " + self.owner.name + ", " + self.owner.location +"."


class Marketplace:
  def __init__(self):
    self.listings = []
  
  def add_listing(self, new_listing):
    self.listings.append(new_listing)

  def show_listings(self):
    for item in self.listings:
      print(item)

veneer = Marketplace()

#print(veneer.show_listing())

class Client():
  def __init__(self, name, location, is_museum, ):
    self.name = name 
    self.is_museum = is_museum
    if is_museum:
      self.location = location
    else:
      self.location = "Private location"
  
  def sell_artwork(self, artwork, price):
    if artwork.owner == self:
      new_listing = Listing(artwork, price, self)
      veneer.add_listing(new_listing)

    def buy_artwork(self, artwork):
      if artwork.owner != self:
        art_listing = None
        for listing in veneer.listings:
          if listing.art == artwork:
            art_listing  = listing
            break
        if art_listing != None:
          art_lsint.art.owner = self
          vennner.remove_listing(art_listing)



edytta = Client("Edytta Halpirt", "Private Collection", False)

moma = Client("The MOMA", "New York", True)

girl_with_mandolin = Art("Picasso, Pablo","Girl with a Mandolin (Fanny Tellier)", "oil on canvas", 1910, edytta)



class Listing():
  def __init__(self, art, price, seller):
    self.art = Art
    self.price = price
    self.seller = seller

  def __repr__(self):
    return '%s,%s.'%(self.art.title, self.price)

print(girl_with_mandolin)
edytta.sell_artwork(girl_with_mandolin, "$6M (USD")

veneer.show_listings()

moma.buy_artwork(girl_with_mandolin)

Why is that?

Hello, @piwero, and welcome to the Codecademy Forums!

Carefully check the indentation of all of your methods, for example, the buy_artwork method for Client.

Also check this __init__ method that you have for Listing:

  def __init__(self, art, price, seller):
    self.art = Art
    self.price = price
    self.seller = seller

What are you assigning to self.art?

3 Likes

The problem is in the line

self.art = Art

It should be art without the capitalized ‘A’, to reference the argument you pass into the parameter ‘art’.

1 Like