我想做的是: 例如:
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中执行此操作?
答案 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属性。