Google app engine 我的代码实现多态模型有多难看?

Google app engine 我的代码实现多态模型有多难看?,google-app-engine,google-cloud-datastore,polymorphism,Google App Engine,Google Cloud Datastore,Polymorphism,我正在使用 简单问题:我下面的代码不使用下面这行代码,我在其他人的代码中看到了这行代码。它应该做什么 #super(GeneralModel, self).__init__(*args, **kwargs) 凌乱的问题:我感觉我下面的代码虽然看起来很有效,但并不是最漂亮的解决方案 我正在做的事情的概要:我正在基于发布到服务器的“不干净”JSON对象实例化(或创建)一个新的数据存储模型实体。首先我想做一些通用(或超级)模型中指定的通用输入数据清理,然后再做一些特殊方法,这些方法在每个特殊(或子类

我正在使用

简单问题:我下面的代码不使用下面这行代码,我在其他人的代码中看到了这行代码。它应该做什么

#super(GeneralModel, self).__init__(*args, **kwargs)
凌乱的问题:我感觉我下面的代码虽然看起来很有效,但并不是最漂亮的解决方案

我正在做的事情的概要:我正在基于发布到服务器的“不干净”JSON对象实例化(或创建)一个新的数据存储模型实体。首先我想做一些通用(或超级)模型中指定的通用输入数据清理,然后再做一些特殊方法,这些方法在每个特殊(或子类)模型中指定为
def parse

class GeneralModel(polymodel.PolyModel):
 lat_long_list = db.ListProperty(db.GeoPt)
 zooms = db.ListProperty(int)

     def __init__(self, *args, **kwargs):
  self.lat_long_list = [ db.GeoPt( pt[0] , pt[1] ) for pt in zip( kwargs["lat"] , kwargs["lon"] ) ]
  del kwargs["lat"]
  del kwargs["lon"]
  if "zooms" not in kwargs: kwargs["zooms"] = ZOOMS # some default
  for property,value in kwargs.items():
   setattr(self,property,value)
  #super(NamedModel, self).__init__(*args, **kwargs)
  self.parse()

 def parse(self):
         raise NotImplementedError('Need to define this for each category')


class SpecialModel(GeneralModel):
 stringText = db.StringProperty()
 words_list = db.StringListProperty()

 def parse( self ):
  self.words_list = self.stringText.split(",")  
以下是我测试代码是否有效的方法:

>>>kwargs={'stringText':'boris,ted','lat':[0,1,2,3],'lon':[0,1,2,8],'zooms':[0,10]}
>>>entity=SpecialModel(key_name="tester",**kwargs)
>>>entity.words_list
['boris', 'ted']

“super”行调用父实体的构造函数。如果不包含它,则不会调用父构造函数,并且模型也不会正确初始化。实际上,您应该在自己初始化之前首先调用它

但是,强烈反对在模型上重写构造函数。构造函数不仅在您调用它时使用,而且还被系统用来构造从数据存储加载的实例,在后一种情况下,参数和预期行为是不同的,并且依赖于实现

相反,您可能应该定义一个工厂方法,如下所示:

class MyModel(db.PolyModel):
  @classmethod
  def create(cls, foo, bar):
    # Do some stuff
    return cls(foo, bleh)

谢谢那就更有意义了!