在python中将自定义类强制转换为dict

在python中将自定义类强制转换为dict,python,Python,也许我忽略了一些简单的东西,但为了可读性,我想在python中将一个自定义类的实例转换为字典,但还不知道如何转换。为了用伪代码进行解释,我希望能够做到: class A: # class things... a = A() b = dict(a) 我已经定义了A中的b。这可能吗?如果你定义了“iter”,它就可以工作了TM: class A(object): def __init__(self, a, b): self.a = a self.b =

也许我忽略了一些简单的东西,但为了可读性,我想在python中将一个自定义类的实例转换为字典,但还不知道如何转换。为了用伪代码进行解释,我希望能够做到:

class A: # class things... a = A() b = dict(a) 我已经定义了A中的b。这可能吗?

如果你定义了“iter”,它就可以工作了TM:

class A(object):
    def __init__(self, a, b):
        self.a = a
        self.b = b
    def __iter__(self):
        return vars(self).iteritems()
给予


你可以回报或放弃任何你喜欢的东西。也就是说,我支持评论中的建议,即您实际上应该只实现一个.to_dict方法,因为对于其他目的来说,\u iter____________________________________________

类Bcollections.MutableMapping: 定义初始自我,*args,**kwargs: self.b=dict 定义自身: 把它还给自己 def keyself: 返回self.b.键 def项目本身: 退回自助物品 def值本身: 返回self.b.值
或者其他建议

通常,这是通过自定义方法实现的。a、 b=a有问题吗?你对b有什么期望?如果您只想访问a的名称空间{attributes:values},那么可以使用varsa或.._dict__。我希望避免使用自定义方法getDict,这是我在等待答案时编写的方法。“这看起来……太草率了。”sidi有一个不错的答案,但我需要这个动作来递归,也就是说,让a+1的成员们,比我快一点。也就是说,这可能太过分了,似乎OP对varsa很满意。@Lattyware:或者我们可以分割差异,使用@tcaswell建议的自定义uuu str_uuuuuuu或uu repr_uuuuu,如果可读性是个问题,而不是dict本身。@sidi在评论中也给出了一个很好的答案uu str_uuuuu和uu repr_uuuu并不足够。虽然这将允许使用实例作为dict调用的参数,它只会回显实例变量b,它已经是一个字典,并且必须由对象维护。提问者到底想要什么并不明显,但字典的内容似乎应该以某种方式反映实例的内容。
>>> A(2,3)
<__main__.A object at 0x101ea70d0>
>>> dict(A(2,3))
{'a': 2, 'b': 3}