2011-01-05 77 views
1

我不認爲這很容易做到,但這裏的東西:傳遞價值分配

假設你有一個簡單的類是這樣的:

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

回答

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

謝謝!非常聰明! :) – FernandoEscher 2011-01-06 02:25:33

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

檢查出奈德的答案爲首選的方式來創建屬性 – 2011-01-06 01:19:39