将类表示为字典或列表

时间:2013-04-25 06:12:40

标签: python structure idioms

我的类用于从一个系统获取数据,进行一些修改然后将它们输出到另一个系统。在我完成所有必要的转换后,通常会将其转换为dictlist

到目前为止,我所做的是我已经制作了两个名为as_dict()as_list()的方法,每当我需要这种表示时就会使用它。

但我很好奇是否有办法dict(instance_of_my_class)list(instance_of_my_class)

我一直在阅读magic methods,似乎这是不可能的?

可以使用一些简单的示例代码:

class Cost(object):
    @property
    def a_metric(self):
        return self.raw_data.get('a_metric', 0) * 0.8

    [..]
    # Repeat for various kinds of transformations

    def as_dict(self):
        return {
          'a_metric': self.a_metric,
          [...]
        }

1 个答案:

答案 0 :(得分:8)

你是说这样的意思吗?如果是这样,您必须定义一个产生键值对的__iter__方法:

In [1]: class A(object):
   ...:     def __init__(self):
   ...:        self.pairs = ((1,2),(2,3))
   ...:     def __iter__(self):
   ...:         return iter(self.pairs)
   ...:     

In [2]: a = A()

In [3]: dict(a)
Out[3]: {1: 2, 2: 3}

此外,似乎dict尝试在.keys之前调用__getitem__ / __iter__方法,因此您可以list(instance)和{{1}返回完全不同的东西。

dict(instance)