Google应用引擎库和子类

2024-10-02 18:21:18 发布

您现在位置:Python中文网/ 问答频道 /正文

我想要一个名为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的一个子类。测试失败。在

  1. 为什么我不能这么做?在
  2. 什么是工作?在

Tags: 代码testselfapiidget客户机属性
2条回答

我刚发现GAE有解决办法。它被称为多模型:

https://developers.google.com/appengine/docs/python/ndb/polymodelclass

模型是由它们的“种类”定义的,而子类是另一种类型,即使它看起来是一样的。在

子类化的目的不是共享值,而是共享为给定“种类”创建的“模式”。在

在基类ndb.Model上创建一个种类映射(似乎您使用的是ndb,因为您提到了get_by_id),并且当您执行这样的查询时,会查找每种类型。在

对于子类,kind只是defined作为类名:

@classmethod
def _get_kind(cls):
  return cls.__name__

相关问题 更多 >