转换期间列表被覆盖

时间:2019-02-18 19:47:21

标签: python python-3.x

好吧,我正在为我的一类创建类似于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()

有人有什么主意可以帮助我解决吗?

最诚挚的问候,

0 个答案:

没有答案
相关问题