我想要一个名为MBUser的基类,它有一些预定义的属性,我不想更改这些属性。如果客户机希望向MBUser添加属性,建议将MBUser作为子类,并将任何附加属性放入其中。在
API代码不知道客户机是否真的是MBUser的子类,但这并不重要。当时的想法是,我们只需通过身份证就可以得到MBUser。所以我希望这个方法能奏效:
def test_CreateNSUser_FetchMBUser(self):
from nsuser import NSUser
id = create_unique_id()
user = NSUser(id = id)
user.put()
# changing MBUser.get.. to NSUser.get makes this test succeed
get_user = MBUser.get_by_id(id)
self.assertIsNotNone(get_user)
这里NSUser是MBUser的一个子类。测试失败。在
我刚发现GAE有解决办法。它被称为多模型:
https://developers.google.com/appengine/docs/python/ndb/polymodelclass
模型是由它们的“种类”定义的,而子类是另一种类型,即使它看起来是一样的。在
子类化的目的不是共享值,而是共享为给定“种类”创建的“模式”。在
在基类
ndb.Model
上创建一个种类映射(似乎您使用的是ndb
,因为您提到了get_by_id
),并且当您执行这样的查询时,会查找每种类型。在对于子类,kind只是defined作为类名:
相关问题 更多 >
编程相关推荐