title: Python how to add an attribute to an existing object in a function
body: <p>I am trying create a dynamic function that dynamically add attributes to easily make values accessible in a jinja template. </p>
  
  <p>This code is working but it is static. </p>
  
  <pre><code># Used to display a cart summary of items that have been pledged.
  products_in_cart = Cart.query.filter(Cart.campaign_id == campaign_id).all()
  # total_cart_quantity(products_in_cart, "quantity", "quantity_total")
  for item in products_in_cart:
      item.quantity_total = 0 #Adding the attribute quantity_total
  
      for item_loop2 in products_in_cart:
          if item.user_id == item_loop2.user_id:
              item.quantity_total = item.quantity_total + item_loop2.quantity
  
  # Remove duplicate objects based on user_id attribute.
  new_set = set()
  new_list = []
  for obj in products_in_cart:
      if obj.user_id not in new_set:
          new_list.append(obj)
          new_set.add(obj.user_id)
  
  products_in_cart = new_list
  </code></pre>
  
  <p>I would like to make the added attribute names dynamic based upon arguments passed into the function so I may use elsewhere. Dot notation wont work because I need a variable to name the attribute. obj[variable_attrbute] errors. setattr() does nothing.</p>
  
  <pre><code>def total_cart_quantity(cart_objects, sum_attribute, new_attribute):
  '''
      From cart get the total of a particular quantity and add it to a new attribute.
      cart_objects = the queried cart_objects.
      sum_attribute = the attribute to be summed.
      new_attribute = the string of the new attribute name
  '''
  for item in cart_objects:
      # Two different attempts to add an attribute. 
      # setattr will just not add the attribute
      setattr(item, sum_attribute, new_attribute) # this will do nothing
      # item[new_attribute] = 0 # this will error
  
      for item_loop2 in cart_objects:
          if item.user_id == item_loop2.user_id:
              item[new_attribute] = item[new_attribute] + item_loop2[sum_attribute]
  
  # Remove duplicate objects based on user_id attribute.
  new_set = set()
  new_list = []
  for obj in cart_objects:
      if obj.user_id not in new_set:
          new_list.append(obj)
          new_set.add(obj.user_id)
  
  products_in_cart = new_list
  
  return products_in_cart
  </code></pre>
  
  <p>How does one dynamically add attribute names and values?</p>