我的类用于从一个系统获取数据,进行一些修改然后将它们输出到另一个系统。在我完成所有必要的转换后,通常会将其转换为dict
或list
。
到目前为止,我所做的是我已经制作了两个名为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,
[...]
}
答案 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)