2013-09-10 95 views
2

對象內的信號響應在JavaScript中,如果我有一個包含希望將信號發送到對象外部對象的方法,我可能會做這樣的事情......附加處理程序蟒蛇

function class1(arg1){ 
    ... 
    //something has happened - send out an alert 
    this.method1(); 
    ... 
} 

var obj1 = new class1(); 

//define function to respond to the request from obj1 
obj1.method1 = function(){ ... } 

在python中有這樣做的等價方法嗎? (python 2)。

+0

我認爲blinker可以給你你需要的東西https://pypi.python.org/pypi/blinker – zero323

+0

[向現有對象添加方法]的可能重複(http://stackoverflow.com/questions/972 /添加方法到現有對象) – Marcin

+0

我不想將方法添加到對象。 – spiderplant0

回答

2

你可以在python中做到這一點。

class class1(object): 
    def __init__(self, arg): 
     self.arg = arg 
    def myevent(self): 
     self.method1(self) 
    def realmethod(self): 
     print('arg', self.arg) 

def eventhandler(obj): 
    print('event') 
    obj.realmethod() 


>>> obj1 = class1('real object attr') 
>>> obj1.method1 = eventhandler 
>>> obj1.myevent() 
event 
('arg', 'real object attr') 

和在JavaScript你要確保你設置method1可以被調用它會被稱爲前。

編輯:更新的代碼示例,以確保您可以通過selfeventhandler並使用它,就像在真正的方法。

+0

非常感謝,順便說一句,你叫什麼這種模式? – spiderplant0

+0

@Marcin,你說得對,但如果你需要的話,你總是可以將'self'從'myevent'傳遞給'method1'。 – zaquest

+0

@Marcin,我不想在對象上創建一個方法。即我不想讓自己被傳遞。我只想提醒事件發生的對象之外的代碼--obj1不處理事件,它取決於obj1之外的代碼 – spiderplant0