我们假设我有以下课程:
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
中添加一些新方法来实现这一点,以便它会自动将它们转换为所需的输出?
答案 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。