尝试重置值时访问错误的属性...?

时间:2016-07-25 19:36:16

标签: python

在这个示例代码中,我试图让整堆数据可以调用:

class Data(object):
    def __init__(self, data):
        self._raw_data = data

        for key, val in data.items():
            if isinstance(val, dict):
                if 'data' in val.keys():
                    setattr(self, key, Dataset(val))
                else:
                    setattr(self, key, Data(val))
            else:
                setattr(self, key, val)

    def __getattr__(self, name):
        return None

    @property
    def raw(self):
        return self._raw_data


class Dataset(Data):
    def __init__(self, data):
        self._raw_data = data
        super().__init__(data)
        for entry in self.data:
            # need to debug this
            self.data[self.data.index(entry)] = Data(entry)

最终发生的是这件事。我会尝试:

>>> example = {'dataset': {'id': 1, 'data': [{'param1': 3, 'param2': 4}, {'param1': 5, 'param2': 6}]}}
>>> data1 = Data(example)
>>> print(data1.dataset.id)
1

现在按预期工作。最后一行的问题,导致数据集对象中的__raw_data属性发生变化,我不知道如何(也看起来不对)。显然,我并不了解有关遗传的重要事项。我想要做的是将所有数据放入可调用属性,但也保留原始数据用于各种目的。这就是我得到的:

>>> print(data1.raw)
{'dataset': {'id': 1, 'data': [<wtf.Data object at 0x102a8da58, <wtf.Data object at 0x102a8da90>]}}
然而,它应该返回原始数据:

>>> print(data1.raw)
{'dataset': {'id': 1, 'data': [{'param1': 3, 'param2': 4}, {'param1': 5, 'param2': 6}]}}

适用于数据对象:

>>> for item in data1.dataset.data:
...     print(item.raw)
{'param2': 4, 'param1': 3}
{'param2': 6, 'param1': 5}

感谢您的帮助。

0 个答案:

没有答案