Represent a class as a dict or list
idioms, python, structure
Solution
Do you mean something like this? If so you have to define a `__iter__` method that yield's key-value pairs:
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}
Also, it seems that `dict` tries to call the `.keys` / `__getitem__` methods before `__iter__`, so you can make `list(instance)` and `dict(instance)` return something completely different.
In [4]: class B(object):
...: def __init__(self):
...: self.d = {'key':'value'}
...: self.l = [1,2,3,4]
...: def keys(self):
...: return self.d.keys()
...: def __getitem__(self, item):
...: return self.d[item]
...: def __iter__(self):
...: return iter(self.l)
...:
In [5]: b = B()
In [6]: list(b)
Out[6]: [1, 2, 3, 4]
In [7]: dict(b)
Out[7]: {'key': 'value'}
Problem
I've classes that is used for getting data from one system, making some modifications and then outputting them into another system. Which usually goes the way of converting it into a `dict` or a `list` after I've made all the necessary conversions. So far what I've done is that I've made two methods called `as_dict()` and `as_list()` and used that whenever I need that representation. But I'm curious if there's a way to be able to do `dict(instance_of_my_class)` or `list(instance_of_my_class)`. I've been reading up on magic methods and it seems as if this is not possible? And some simple sample code to work with: ``` 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, [...] } ```