Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为什么Google App Engine NDB在NDB.Model中的@classmethod中返回属性值的StringProperty(…)?_Python_Google App Engine - Fatal编程技术网

Python 为什么Google App Engine NDB在NDB.Model中的@classmethod中返回属性值的StringProperty(…)?

Python 为什么Google App Engine NDB在NDB.Model中的@classmethod中返回属性值的StringProperty(…)?,python,google-app-engine,Python,Google App Engine,我有一个简单的NDB模型: from google.appengine.ext import ndb import logging from libs import Api class User(ndb.Model): oauth_token = ndb.StringProperty(required=False, indexed=False) @classmethod def update_data(self): logging.info("uid

我有一个简单的NDB模型:

from google.appengine.ext import ndb
import logging
from libs import Api

class User(ndb.Model):
    oauth_token = ndb.StringProperty(required=False, indexed=False)

    @classmethod
    def update_data(self):
        logging.info("uid = %s, oauth token = %s" % (self.key, self.oauth_token))
        api = Api.Init(self.oauth_token)
在单独的文件test.py中,我有以下代码:

from models import User
from google.appengine.ext import webapp, ndb
import logging

class Test(webapp.RequestHandler):
    def get(self):
        uid = 1
        u = ndb.Key(User, str(uid)).get()
        logging.info("uid = %s, oauth token = %s" % (u.key.string_id(), u.oauth_token))
        u.update_data()
以下是日志中的输出:

INFO     2012-07-22 16:32:42,532 test.py:8] uid = Key('User', '1'), oauth token = xxxxxxxxxxxxxxxxxxx
INFO     2012-07-22 16:32:42,532 user.py:9] uid = ModelKey('__key__'), oath token = StringProperty('oauth_token', indexed=False)

为什么我得到的是StringProperty'oauth_token',index=False而不是实际属性的值?

update_数据用@classmethod修饰,这意味着update_数据中的self是对用户类的引用,而不是实例方法。只需删除@classmethod。

update\u数据用@classmethod修饰,这意味着update\u数据中的self是对用户类的引用,而不是实例方法。只需删除@classmethod。

谢谢。我猜作为一个C语言的人,我错误地认为@classmethod使这个方法成为了一个实例方法。谢谢。我猜作为一个来自C语言的人,我错误地认为@classmethod使这个方法成为了一个实例方法。