python - 当变量在别处发生变化时如何更新类的列表或字典?

标签 python oop

如何在外部更改后更新包含其他 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

然后更新值:

test = Test()                  

print(test.dic)
print(test.lst)

test.update_values()

print(test.dic) 
print(test.lst)

结果没有变化:

{'other_number': 0, 'some_number': 0}
[0, 0]
{'other_number': 0, 'some_number': 0}
[0, 0]

我实际上认为,字典和列表包含对这些指向内存中某处的变量的引用。因此,如果这些发生变化,那也应该发生变化。但事实似乎并非如此。有什么解释吗?

最佳答案

如果您想在使用 self.lstself.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}
>>> 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}

关于python - 当变量在别处发生变化时如何更新类的列表或字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32844560/

相关文章:

c++ - 在类层次结构中初始化变量

python - 谁能解释一下Python中的函数闭包?

python - 计算numpy中2个点列表的距离

python - 如何在Databricks中使用os.walk()来计算Azure datalake中的目录大小

oop - 为什么建议避免使用 java-bean 风格来创建域对象?

java - 工厂方法模式的优势

java - 面向对象设计 : inheritance vs type (enum) variable

java - 在类文件中添加总计

python - 根据时间戳合并目录中的 csv 文件

python - 如何在字符串中定义过滤器或表达式?