【发布时间】:2020-08-24 19:38:50
【问题描述】:
我想在返回类的 getter 中更改字典。我可以想象这个问题已经回答了,但我找不到。有类似的问题讨论了 dict 中键的重新索引/重新映射,但它们没有回答我的问题。
因此,我的假设是 getter 返回 self._d,然后查找键 a 并更新值。让我困惑的是赋值a.d['a'] = 2 并没有改变字典。
class A:
def __init__(self):
self._d = None
@property
def d(self):
self._d['a'] = 4 # this line changes the behavior
return self._d
@d.setter
def d(self, value):
self._d = value
a = A()
a.d = {'a': 1}
a.d['a'] = 2
print("a.d: ", a.d['a']) # prints 4
【问题讨论】:
-
你的
print语句中的 getter 将它重置回 4 -
如果您在执行
a.d['a']=2之后和print语句之前查看a._d['a'],您将看到它确实成功地更改了字典。跨度> -
@alani 在 print 声明之前你是如何看待
a.d的?使用我的调试器(pycharm),我从来没有看到值变为 2。 -
我没有。我查看了基础属性
a._d。每次您尝试查看a.d时,您都会调用您的 getter 方法,它会覆盖它,所以我并不惊讶您没有看到任何变化。 -
确实,您接受的答案正是如此(检查
a._d) - 请参阅“如果我们添加更多打印语句”开头的段落
标签: python properties getter