动态更改Python中的变量

时间:2015-11-17 08:22:22

标签: python python-2.7

我想做的是: 例如:

class a(object):
    def __init__(self):
        self.d = {'x':'xxx','y':'xxx'}
        self.cla = [['B', self.d['x'], self.d['y']], ['C', self.d['x'], self.d['y']]]

如您所见,self.cla是一个包含两个列表的列表,我想要做的是如果我更改self.d['x'],那么self.cla中的所有参数都等于{ {1}}同时更改。 e.g。

self.['d']

如果我用C ++'版本'编写代码,它应该是这样的:

self.d['x'] = 'abc'

# then, the result i want to get after changing is 
self.cla = [['B', 'abc', 'xxx'], ['C', 'abc', 'xxx']]

所以,在我将self.cla = [['B', &self.d['x'], &self.d['y']], ['C', self.d['x'], self.d['y']]] 更改为' abcde'在self.d['x']中,self.cla中的值为self.d

我怎样才能在Python中执行此操作?

1 个答案:

答案 0 :(得分:0)

使用cla的属性:

class A(object):
        def __init__(self):
            self.d = {'x': 'xxx', 'y': 'xxx'}
            self._cla = self.cla

        @property
        def cla(self):
            self._cla = [['B', self.d['x'], self.d['y']],
                         ['C', self.d['x'], self.d['y']]]
            return self._cla

a = A()
print(a.cla)
a.d['x'] = 123
print(a.cla)
a.d['y'] = 'xyz'
print(a.cla)

这导致

[['B', 'xxx', 'xxx'], ['C', 'xxx', 'xxx']]
[['B', 123, 'xxx'], ['C', 123, 'xxx']]
[['B', 123, 'xyz'], ['C', 123, 'xyz']]

不要尝试以这种方式设置a.cla目录;那么你还需要定义一个setter属性。