2013-12-23 26 views
1

query_bookthis示例定义为@classmethod,date是一个属性。为什么这个gae示例使用类方法?

cls.date是什么意思?

如果它引用实例属性,那么它为什么在@classmethod

如果它没有引用一个实例,那么它的date是指什么?

编辑

date似乎并没有成为一个类的属性,因为下面的代码打印出了两个实例两个不同的日期。如果它是一个类属性,它将打印相同的值。

g1 = Greeting() 
g2 = Greeting() 
g1.put() 
g2.put() 
self.response.out.write(g1.date) 
self.response.out.write("<br>") 
self.response.out.write(g2.date) 

回答

0

因为在类级别访问date属性允许访问ndb.DateTimeProperty属性的定义,而在实例级访问允许访问分配给实例的值。

type(g1.date).__name__ == "datetime" 
type(Greeting.date).__name__ == "DateTimeProperty" 
0

cls.date不是实例属性,而是类属性。您可以使用Greeting.date。但是,如果班级名称更改为“再见”,则应更改为Goodbye.date,而cls版本不更改。

+0

我编辑了这个问题,因为它太长了评论:'date'似乎是一个实例属性,因为它的值在不同的实例中是不同的。 – stenci

+1

@stenci,' .date'是实例属性,而'Greeting.date','cls.date'(在类方法中)是类atttribute。 – falsetru

+0

只有一个具有'date'属性的类定义。如果'g1.date'!='g2.date',那么什么是'Greetings.date'? – stenci

相关问题