【发布时间】:2021-10-30 17:00:05
【问题描述】:
我正在尝试实现动态更新对象中的一些参数。 让我们有一个我在某些 dict 中使用的属性 ->
class Test():
def __init__(self):
self._id = None
self.some_dict = {"id": self.id}
@property
def id(self):
return self._id
@id.setter
def id(self, new_id: int):
self._id = new_id
tst = Test()
tst.id = 112
print(tst.id) # 112
print(tst.some_dict) # {'id': None}
想要的结果是:
print(tst.some_dict) # {'id': 112}
如何在某些参数(id)作为属性被更新后更新字典?
编辑: 我当然可以:
@id.setter
def id(self, new_id: int):
self._id = new_id
self._some_dict.update({"id": self._id})
但是很多参数写起来有点累,有没有自动的方法?
【问题讨论】:
-
字典不会隐式更新,因为其他一些变量会更新。您要么需要在 setter 中显式更新 dict,要么将
some_dict设为@property并始终即时创建它。 -
"有没有自动的方法?"好吧,您可以在用户要求时自动创建字典。您已经知道要使用的工具 - 它与您现在使用的工具相同,用于在用户请求时自动创建 id 值。
-
您的代码中没有
self._some_dict。 (错字?)您使用的 getter 和 setter 没有 做 任何特殊功能,只需使用self.id代替 - 除非您真的需要一个 getter/setter 来进行 logic 。没有它,python 工作得很好——而且它更简单/更容易理解 -
你总是可以在你的课堂上放弃
self._id = None,而是从你用作“通用”支持字段的dict中提取/放置所有值(通过getter/setter)——但这并不多感觉该类已经有一个存储其所有成员的字典 ...
标签: python dictionary properties