首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >什么是获取()获取GAE?

什么是获取()获取GAE?
EN

Stack Overflow用户
提问于 2010-10-31 15:45:28
回答 3查看 336关注 0票数 1

这是我的另一个问题的后续。

我以为

代码语言:javascript
运行
复制
    mylist = list(Rep().all().fetch(50))

使mylist成为一个列表。但是当我试图得到它的长度时,我会得到它的信息

代码语言:javascript
运行
复制
self.response.out.write(len(P))
TypeError: object of type 'Rep' has no len()

有人能解释我做错了什么吗?

代码语言:javascript
运行
复制
    Rep().replist = L                                   
    Rep().put()                              
    mylist = list(Rep().all().fetch(50))
    P = mylist.pop()
    self.response.out.write(len(P))

更新

作为其他可能遇到同样问题的人的参考,我张贴了下表,这对我很有帮助。(原始这里)

代码语言:javascript
运行
复制
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

谢谢你的回答。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-11-01 01:29:45

而不是这样:

代码语言:javascript
运行
复制
Rep().replist = L                                    
Rep().put()                               
mylist = list(Rep().all().fetch(50)) 
P = mylist.pop() 
self.response.out.write(len(P)) 

试着做这样的事情:

代码语言:javascript
运行
复制
r = Rep()
r.replist = L                                    
r.put()                               
mylist = Rep.all().fetch(50)
P = mylist.pop() 
self.response.out.write(len(P.replist)) 

你的这个代码:

代码语言:javascript
运行
复制
Rep().replist = L                                    
Rep().put()                               

正在创建Rep实例,然后将其replist分配给L。然后创建另一个Rep,并在其上调用put()。因此,您要写到数据存储的是一个空白的Rep -它不会有您的列表。

在此代码中:

代码语言:javascript
运行
复制
mylist = list(Rep().all().fetch(50)) 

您正在对all()的一个实例调用Rep -您应该直接在类上调用它。另外,您不需要在list()中包装结果,因为fetch()已经返回了一个列表。

然后在下面你有这个:

代码语言:javascript
运行
复制
self.response.out.write(len(P)) 

您正在尝试获取P的长度(即Rep),而不是Preplist长度。

更新:

针对第一项评论:

在此代码中:

代码语言:javascript
运行
复制
r = Rep()

Rep()正在创建一个Rep实例。然后,r =将该实例分配给名称r。所以现在名称r指的是Rep的实例。

然后在这个代码中:

代码语言:javascript
运行
复制
r.replist = L

它将r的replist属性赋值给list L

您是正确的,而不是这两行,您可以这样做:

代码语言:javascript
运行
复制
r = Rep(replist = L)

这样做是将L传递给Rep__init__函数,参数名为replist__init__函数Rep是从db.Model基类继承的。此函数将提供给模型上同名属性的任何参数的值分配给该属性。因此,在本例中,它将L分配给replist属性。因此,它具有与最初的两行代码相同的效果,但它的工作方式有点不同。

针对第二项评论:

Python中的=运算符意味着赋值,这与数学等价是不一样的。

所以这个代码:

代码语言:javascript
运行
复制
r = Rep()

并不意味着r现在等同于Rep(),您现在可以使用rRep()来表示相同的内容。

它的意思是r现在等于Rep()的结果。Rep()所做的是分配一个Rep的新实例。因此,这使得r成为对新Rep的引用。因此,为了稍后引用同一个实例,您需要使用r,而不是Rep() (每次调用它时都会分配一个新实例)。

票数 3
EN

Stack Overflow用户

发布于 2010-10-31 16:31:07

试试这个:

代码语言:javascript
运行
复制
self.response.out.write(len(mylist))
票数 0
EN

Stack Overflow用户

发布于 2010-10-31 23:45:04

如果要打印复制器属性的元素数。

代码语言:javascript
运行
复制
self.response.write(len(P.replist));

希望我能帮到你

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4063767

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档