在外部更改后,如何更新包含其他 self.variables 的 self.dictionary 或 self.list ?
例如我们有以下测试类:
class Test():
def __init__(self):
self.some_number = 0
self.other_number = 0
self.lst=[self.some_number, self.other_number]
self.dic={'some_number': self.some_number, 'other_number': self.other_number}
def update_values(self):
self.number = 2
self.other_number = 3
Run Code Online (Sandbox Code Playgroud)
然后更新值:
test = Test()
print(test.dic)
print(test.lst)
test.update_values()
print(test.dic)
print(test.lst)
Run Code Online (Sandbox Code Playgroud)
结果没有变化:
{'other_number': 0, 'some_number': 0}
[0, 0]
{'other_number': 0, 'some_number': 0}
[0, 0]
Run Code Online (Sandbox Code Playgroud)
我实际上认为,字典和列表保存了对指向内存中某处的这些变量的引用。因此,如果这些改变,那也应该改变。但事实似乎并非如此。有什么解释吗?
self.lst如果您想在使用or时得到的值中反映更新后的值self.dic,请将它们设为property:
class Test():
def __init__(self):
self.some_number = 0
self.other_number = 0
def update_values(self):
self.some_number = 2
self.other_number = 3
@property
def lst(self):
return [self.some_number, self.other_number]
@property
def dic(self):
return {'some_number': self.some_number,
'other_number': self.other_number}
Run Code Online (Sandbox Code Playgroud)
>>> t = Test()
>>> t.lst
[0, 0]
>>> t.dic
{'some_number': 0, 'other_number': 0}
>>> t.update_values()
>>> t.lst
[2, 3]
>>> t.dic
{'some_number': 2, 'other_number': 3}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4172 次 |
| 最近记录: |