问题描述
我知道 Python 中与 classmethods 相关的问题已得到多次解答,但即使实施了这些解决方案,我面临的问题仍然存在。
我遇到了许多确实帮助我理解基本逻辑的答案,但由于这里的 ndb.Model
实现,我发现很难查明问题。
我的代码结构,
class A(ndb.Model):
@classmethod
def fun(cls,input):
db_obj = cls.get_by_id(input) # get_by_id is ndb.Model function that brings record from db
return db_obj.required_data
class B(A):
@classmethod
def fun(cls,input):
required_data = super(B,cls).fun(input)
当我们到达 cls.get_by_id(input)
时,即使存在所需的记录,DB 也不会返回任何内容。当我不将派生类 fun()
作为 classmethod 并像 A.fun()
一样直接调用它时,它就会起作用。但是,我认为这不是正确的实现。
对上述任何帮助都会很棒。谢谢!
解决方法
您尝试检索的数据存储实体是 A 实体还是 B 实体?
我怀疑它是 B 实体,因为您以 B.fun()
开始该过程。
如果是这种情况,那么 get_by_id
中的 A.fun()
将不起作用,因为它正在尝试检索 A 实体。 cls
中的 A.fun()
是 A 而不是 B,因此它试图获取一个不存在的 A 实体。
一个解决方案可能是修改 A.fun 以采用指示要检索的实体类型的参数。这可能是类或只是一个字符串。像这样:
class A(ndb.Model):
@classmethod
def fun(cls,input,cls2):
db_obj = cls2.get_by_id(input) # get_by_id is ndb.Model function that brings record from db
return db_obj.required_data
class B(A):
@classmethod
def fun(cls,input):
required_data = super(B,cls).fun(input,cls)