google app engine polymodel - 覆盖实例方法 - 失败 - python

时间:2018-02-13 17:44:32

标签: python google-app-engine google-cloud-datastore method-overriding polymodel

这是我想要完成的事情的简化:

B类继承自A.

B类应该覆盖A类中的call_me方法。

我使用谷歌应用引擎(也许这就是为什么?)

from google.appengine.ext import ndb
from google.appengine.ext.ndb import polymodel

class A(polymodel.PolyModel):
    def call_me(self):
        print "super class called"
        return
    @classmethod
    def get_call_me(cls, qry)
        return [m.call_me() for m in qry]

class B(A):
    def call_me(self):
        print "sub class method called"
        return

当我打电话

object_b = B()
all_A = A.query() # get's object_b as well because object_b is an A
A.get_call_me(all_A)

我得到"超级班叫做#34;在终端。

如何确保"子类方法调用"反而被解雇了?

B类是继承的A(在数据存储区中显示为[' A',' B'])。但是,我不希望调用来自A类的call_me。

当我致电B().__class__.__name__时,我得到了'

正确的方法是什么?

没关系。看起来这段代码有效。我正在使用投影qry,所以它无法访问该方法?我不太明白这是如何运作的。

1 个答案:

答案 0 :(得分:1)

没关系。看起来这段代码有效。我正在使用投影qry所以我假设我没有访问该方法?我不太明白这是怎么回事。我稍后会弄清楚的。