我认为不能轻易做到,但事情就是这样:
假设你有一个这样的简单类:
class Demo:
a = 'to update'
b = a
如您所见,我希望变量'b'成为变量'a'的另一个名称。所以,我想做的是这样的事情:
>>> demo = Demo()
>>> demo.a
'to update'
>>> demo.b
'to update'
>>> demo.b = 'updated'
>>> demo.b
'updated'
>>> demo.a
'updated'
所以,这是我想要实现的一个例子。我想要做的是在为变量'b'设置值时将值设置为变量'a'。我的第一个猜测是将两个变量都设置为对实际值的引用,因此它们指向相同的元素。
有什么猜测?以前感谢任何一个回答!
PD:值必须是字符串。
答案 0 :(得分:8)
你无法挂钩分配以获得你正在寻找的效果。你是对的,你需要将a和b都设置为相同的可变对象,并将你的赋值更改为改变对象的东西。
class Demo:
a = ['to update']
b = a
>>> demo = Demo()
>>> demo.a[0]
'to update'
>>> demo.b[0]
'to update'
>>> demo.b[0] = 'updated'
>>> demo.b[0]
'updated'
>>> demo.a[0]
'updated'
你也可以使用属性来达到同样的效果,虽然a和b是实例属性,而不是类属性:
class Demo(object):
def __init__(self):
self._shared = None
@property
def a(self):
return self._shared
@a.setter
def a(self, value):
self._shared = value
@property
def b(self):
return self._shared
@b.setter
def b(self, value):
self._shared = value
答案 1 :(得分:3)
这是一个选项。
class Test(object):
ab = "Original"
def getval(self):
return self.ab
def setval(self, val):
self.ab = val
a = property(getval, setval)
b = property(getval, setval)
t = Test()
print t.a, t.b
t.a = "Hello"
print t.a, t.b
输出是,
Original Original
Hello Hello