1

私はPythonを初めて使用するので、小さなストアを開発してTG2で試してみることにしました。これまで私はそれを愛してきましたが、私のコーディングパレードはまだJavaのLike、たとえばadd to cartCartControllerのメソッドに非常に関連していると思います。

def add(self, **kw):
    pid=kw['pid']

    product = model.Product.by_id(pid)

    cart = self.get_cart()

    # check if that product is already on the cart
    isInCart = False
    for item in cart.items:
        if item.product == product:
            # if it is, increment quantity
            cart.items.remove(item)
            isInCart = True
            item.quantity += 1
            cart.items.append(item)
            break

    if not isInCart:
        item = model.CartItem(cart, product, 1, product.normalPrice)
        cart.items.append(item)

    DBSession.add(item)
    DBSession.flush()

    # updating values for fast retrieval showing
    # how many items are in the cart
    self.update_session(cart)

    return u'Item added to cart, %d items in session' % session['cartitems']

これは確かにこれを達成するための最良の方法ではありませんが、これまでのところ期待どおりに機能します。Javaでは、Itemオブジェクトを更新する必要がありますが、ここでは、リストから削除してから更新し、再度追加する必要があります。これは正しいですか?

4

1 に答える 1

3

オブジェクトを変更しているのでitem、そのアイテムを削除してからリストに追加する必要がある理由はわかりません。なぜそうしなければならないと思いますか?

これをよりpythonicにするために、次のようなことを考えるかもしれません:

items_by_pid = dict([(item.product.pid, item) for item in cart.items])
item = items_by_pid.get(pid, None)
if item is None:
    item = model.CartItem(cart, product, 0, product.normalPrice)
    cart.items.append(item)
item.quantity += 1
于 2009-10-10T17:28:31.850 に答える