好吧,我正在为我的一类创建类似于ORM的行为。从数据库中获取数据后,我想生成一个类型化实例的列表,以便以后可以向它们添加一些额外的行为。
任何新模型都应继承ModelBase类,例如Book(ModelBase)。
一旦调用Book.query(),就会调用ModelBase中的查询方法。当我在此方法中调试rows变量时,会收到4个不同的行。
但是,一旦我遍历行列表并按每一行调用generate_new_instance,结束列表将仅返回收到的最后一行。
我可能在这里想念什么?除了object.__new__(self)
,我还尝试了self()
。相同的行为。
我认为,该错误位于generate_new_instance方法中,因此每一行都覆盖了最后一行。
class ModelBase(object):
....
def query(self, filters=None, order=None):
....
rows = list(query.fetch())
return [self.generate_new_instance(i) for i in rows]
@classmethod
def generate_new_instance(self, result):
obj = object.__new__(self) # ATTENTION HERE.
obj.id = result.key.id
obj.data_bag = result
for k in result:
if not hasattr(obj, k):
continue
prop = getattr(obj, k)
setattr(prop, 'value', result[k])
return obj
class Property(object):
data_type = None
value = None
def __init__(self, data_type):
self.data_type = data_type
class StringProperty(Property):
def __init__(self):
super().__init__('string')
class Book(dsh.ModelBase):
title = dsh.StringProperty()
description = dsh.StringProperty()
author_name = dsh.StringProperty()
有人有什么主意可以帮助我解决吗?
最诚挚的问候,