我们说,这是一个班级A
。它有一个私有值_foo
,它是一个json字符串,并使用属性getter和setter访问它。
代码如下:
import json
class A(object):
_foo = '{"name":"name"}'
@property
def foo(self):
return json.loads(self._foo)
@foo.setter
def foo(self, value):
self._foo = json.dumps(value)
通常,我使用foo
来执行以下操作:
a = A()
print(a.foo['name'])
但是当我想修改它时,我遇到了麻烦。
a = A()
print(a.foo)
# Out: {'name': 'name'}
a.foo['weight'] = 1
print(a.foo)
# Out: {'name': 'name'} # have no change
我需要做的是:
foo = a.foo
foo['weight'] = 1
a.foo = foo
print(a.foo)
现在,我的问题是如何实现更直观和pythonic?
答案 0 :(得分:-1)
我认为你这样做的正确方法就是这样,不要将字典保存为字符串,而是将其作为实际的字典保存。
import json
class A(object):
_foo = {"name":"name"}
@property
def foo(self):
return self._foo
@foo.setter
def foo(self, value):
self._foo = value
def dump_foo(self):
jsons.dump(self.foo)
def __del__(self):
self.dump_foo()
我无法确定每次转储json文件的真正原因,编辑它,使用它,以及何时完成转储。