Переходное значение в классах Python - PullRequest
2 голосов
/ 06 января 2011

Я не думаю, что это можно сделать легко, но вот в чем дело:

Предположим, у вас есть простой класс, подобный этому:

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'

Итак, это пример того, чего я хочу достичь.Что я хочу сделать, это установить значение переменной «а», когда я устанавливаю значение для переменной «б».Мое первое предположение - установить обе переменные так, чтобы они имели ссылку на фактическое значение, поэтому они указывают на один и тот же элемент.

Есть предположения?Предыдущее спасибо любому ответившему!

PD: значение должно быть строкой.

Ответы [ 2 ]

8 голосов
/ 06 января 2011

Вы не можете подключиться к заданию, чтобы получить эффект, который вы ищете.Вы правы, что вам нужно установить оба параметра 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
3 голосов
/ 06 января 2011

Вот вариант.

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...