当基类本身从另一个库类(ndb.Model)继承时,如何从派生类调用基类的classmethod



我知道python中与类方法相关的问题已经回答了很多次,但即使在实现了这些解决方案后,我面临的问题仍然存在。

我发现了许多答案,这些答案确实帮助我理解了基本逻辑,但由于这里的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()开始这个过程的。

如果是这种情况,那么A.fun()中的get_by_id将不起作用,因为它正在尝试检索一个A实体。A.fun()中的cls是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)

最新更新