更改类对象中的字典键

时间:2014-10-14 14:17:26

标签: python class dictionary

我们假设我有以下课程:

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

我可以将这个类转换为这样的字典:

>>> a = Test(1,2)
>>> a.__dict__
{'a': 1, 'b': 2}

现在,我想将该词典的键更改为其他内容:

>>> a.__dict__
{'new_a': 1, 'new_b': 2}

是否有一种正确的方法可以通过在类Test中添加一些新方法来实现这一点,以便它会自动将它们转换为所需的输出?

2 个答案:

答案 0 :(得分:3)

使用__dict__是错误的方法,因为如果您不想更改基础类,则不应修改__dict__。改为添加方法或属性:

class Test:
    def __init__(self, a, b):
        self.a = a
        self.b = b

    @property
    def json_dict(self):
        return dict(('new_' + name, value) for name, value in self.__dict__.items() if name != 'json_dict')

Test(1, 2).json_dict

答案 1 :(得分:0)

没有。无法在字典中修改密钥。你应该做的是创建一个新的dict(而不是就地修改它):

a = Test(1,2)
a.__dict__ = {afunc(k): v for (k, v) in a.__dict__}

如果你想在没有迭代的情况下改变某些属性,你应该:

a.__dict__['new_a'] = a.__dict__.pop('a')

免责声明:我无法理解为什么您需要更改实例中的__dict__ - 它似乎听起来不那么pythonic。