这是我的另一个问题的后续。
我以为
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
复制相似问题