Python类中的传递值赋值

时间:2011-01-05 23:11:48

标签: python variables

我认为不能轻易做到,但事情就是这样:

假设你有一个这样的简单类:

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:值必须是字符串。

2 个答案:

答案 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