2011-09-24 149 views
1

有沒有什麼方法可以在python中每次調用函數時變量的值發生變化?檢測python變量值的變化

有點像聽衆,也許?

具體而言,我指的是其中 僅變量是共享 像GAE會話腳本之間的情況。 (使用Cookies,Memcache等共享數據)

示例: ScriptA & ScriptB,共享會話變量。當腳本B改變它時,SctiptA必須調用一個方法來處理這個改變。

+1

當您談論'腳本A'和'腳本B'時,您是否期望處理程序之間針對不同請求進行通信?這是不可能的 - 一個應用程序可能在多個不同的服務器上運行。 –

回答

3

使用屬性。只有可變值可以更改爲開頭。

class Something(object): 
    @property 
    def some_value(self): 
     return self._actual 
    @some_value.setter 
    def some_value(self, value): 
     print "some_value changed to", value 
     self._actual = value 
+0

我不知道你可以在Python中定義這樣的可寫屬性。我不確定我是否喜歡它,但至少它是新穎的。 –

0

對於這種情況(我不能相信IM說的話)聽起來像制定者

def set_myvar(x): 
    my_var = x 
    some_function() 
    return my_var 
+0

不錯,但在我的情況下,遺憾的是,這個功能不能作爲我正在討論的GAE會話來共享。 – Sathvik

+0

然後只是調用變量後的函數 –

+0

我希望有另一種方式... 尤其是'既是腳本,共享變量不一定共享函數。 – Sathvik

2

情況如果變量是一個類屬性,你可以define __setattr__ in the class

+0

看起來很有希望時,他們需要共享變量的函數來調用函數,但我不控制會話類。 但是,如果有某種方式可以動態地聲明該方法(如JavaScript)或其他方法,那麼它可能會工作... – Sathvik

+1

您可以繼承「會話類」並傳遞子類的實例嗎?子類將完全像基類一樣工作,但會添加額外的功能。 – steveha

1

This package may be helpful。

+0

黑魔法!我不會使用這個包 –

+0

從那個頁面上的例子看來,我們必須總是使用'.value'屬性 - 所以沒有,沒有太多的黑魔法,並且不適合投入現有的代碼。在每次分配之後對字節碼進行黑客添加回調將會變成黑魔法;)如果認爲hackiness是downvote的原因,則downvoter應該讀取downvote按鈕的鼠標懸停文本。 – delnan

+0

我想編輯你的答案,這樣我就可以不使用它了 –

0

你可能需要擴展型「INT」或「浮動」,並重寫功能「SETATTR」,使其以自己的方式迴應。

class MyInt(int): 
    ... 
    def __setattr__(self, attr, val): 
     ... 
     super(MyInt, self).__setattr__(attr, val) 
     ... 

var = MyInt(5)