Python字典引用返回奇怪的东西

时间:2013-06-22 21:16:42

标签: python django list dictionary

我有一个名为checkout_items的python词典列表,由一个简单的函数创建(为了便于阅读,在这里进一步简化):

def checkout_items(request):
    items = get_cart_items(request)
    co_items = [] #a list of dictionaries to be used by the cart
    #iterate through the items and homogenize them into a standardized checkout_item format
    for i in items:
            co_item = {'number': num, 
                       'name': i.name, 
                       'sku': i.sku, 
                       'quantity': i.quantity, 
                       'price': i.price}

我在视图中的其他地方引用此列表(再次,简化):

    checkout_items = cart.checkout_items(request)

    attributes = {}
    for i in checkout_items:
        attributes['item_name_'+ str(i['number'])] = str(i['name'])
        attributes['item_number_'+ str(i['number'])] = str(i['sku'])
        attributes['quantity_'+ str(i['number'])] = str(i['quantity'])

但名称变量设置为:<bound method CartItem.name of <CartItem: CartItem object>

然而,sku(字母数字字符串,就像“名字”)似乎很好。两者都直接来自MySQL。有什么想法正在发生什么?

2 个答案:

答案 0 :(得分:2)

<bound method CartItem.name of <CartItem: CartItem object> 

是一个错误,通常在您调用方法时查看是否存在方法,而不是实际调用方法本身。我会尝试添加()所以i.name()

答案 1 :(得分:2)

正如您所说,您为函数checkout_items()提供的数据来自get_cart_items()。

因此,items不是一个类似于命名空间的对象,而是一个包含您编写的方法的对象,所有这些对象都是CartItem

然后,当您构建co_item时,您将i.name提供给字典,稍后将其打印为bound method CartItem.name of <CartItem: CartItem object>

看起来您的CartItem对象有一个方法名称!你应该试试i.name()。或者,如果name()是其他内容,则使用任何真正具有该名称的属性。