Python 类中的传递值赋值

2 投票
2 回答
761 浏览
提问于 2025-04-16 09:28

我觉得这事儿不太好办,但我想说的是:

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

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' 也能自动得到这个值。我最初的想法是让这两个变量都指向同一个实际值,这样它们就指向同一个元素了。

有什么想法吗?非常感谢任何回答的人!

补充:这个值必须是字符串。

2 个回答

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

撰写回答