这是我的另一个问题的后续。
我以为
mylist = list(Rep().all().fetch(50))使mylist成为一个列表。但是当我试图得到它的长度时,我会得到它的信息
self.response.out.write(len(P))
TypeError: object of type 'Rep' has no len()有人能解释我做错了什么吗?
Rep().replist = L
Rep().put()
mylist = list(Rep().all().fetch(50))
P = mylist.pop()
self.response.out.write(len(P))更新
作为其他可能遇到同样问题的人的参考,我张贴了下表,这对我很有帮助。(原始这里)
Rep().........................Rep object
Rep.all().....................Query object
list(Rep.all())...............List of Rep objects.
list(Rep.all())[0]............A single Rep object
list(Rep.all())[0].replist....A list谢谢你的回答。
发布于 2010-11-01 01:29:45
而不是这样:
Rep().replist = L
Rep().put()
mylist = list(Rep().all().fetch(50))
P = mylist.pop()
self.response.out.write(len(P)) 试着做这样的事情:
r = Rep()
r.replist = L
r.put()
mylist = Rep.all().fetch(50)
P = mylist.pop()
self.response.out.write(len(P.replist)) 你的这个代码:
Rep().replist = L
Rep().put() 正在创建Rep实例,然后将其replist分配给L。然后创建另一个Rep,并在其上调用put()。因此,您要写到数据存储的是一个空白的Rep -它不会有您的列表。
在此代码中:
mylist = list(Rep().all().fetch(50)) 您正在对all()的一个实例调用Rep -您应该直接在类上调用它。另外,您不需要在list()中包装结果,因为fetch()已经返回了一个列表。
然后在下面你有这个:
self.response.out.write(len(P)) 您正在尝试获取P的长度(即Rep),而不是P的replist长度。
更新:
针对第一项评论:
在此代码中:
r = Rep()Rep()正在创建一个Rep实例。然后,r =将该实例分配给名称r。所以现在名称r指的是Rep的实例。
然后在这个代码中:
r.replist = L它将r的replist属性赋值给list L。
您是正确的,而不是这两行,您可以这样做:
r = Rep(replist = L)这样做是将L传递给Rep的__init__函数,参数名为replist。__init__函数Rep是从db.Model基类继承的。此函数将提供给模型上同名属性的任何参数的值分配给该属性。因此,在本例中,它将L分配给replist属性。因此,它具有与最初的两行代码相同的效果,但它的工作方式有点不同。
针对第二项评论:
Python中的=运算符意味着赋值,这与数学等价是不一样的。
所以这个代码:
r = Rep()并不意味着r现在等同于Rep(),您现在可以使用r和Rep()来表示相同的内容。
它的意思是r现在等于Rep()的结果。Rep()所做的是分配一个Rep的新实例。因此,这使得r成为对新Rep的引用。因此,为了稍后引用同一个实例,您需要使用r,而不是Rep() (每次调用它时都会分配一个新实例)。
发布于 2010-10-31 16:31:07
试试这个:
self.response.out.write(len(mylist))发布于 2010-10-31 23:45:04
如果要打印复制器属性的元素数。
self.response.write(len(P.replist));希望我能帮到你
https://stackoverflow.com/questions/4063767
复制相似问题