2013-09-26 62 views
0

我附上了幾個類定義的代碼列表。我的目標是創建一個帶有事件處理程序的類,可以在Timer耗盡時重複執行任務。在TimerClass中,我在__init__類中定義了一個方法on_timed_event。我在主函數a = TimerTest()中安裝了一個TimerTest類,並且我發現它也執行了事件處理函數。類的定義和方法

問題1.這是一種在創建對象實例時自動執行函數的方法嗎?

問題2我想將ClassA.method1傳遞給ClassB。我在下面的main()通過sm.add()延遲類是否正確?是否有可能創建Delay類的實例並將其傳遞爲在同一行上即時傳遞類實例SimpleMath(X,Y)和add()方法的等價物? Lambda函數?

import System 
from System.Timers import (Timer, ElapsedEventArgs) 

class TimerTest(object): 

    def __init__ (self): 
     self.timer = Timer() 
     self.timer.Interval= 1000 
     self.timer.Enabled = True 


     def on_timed_event (source, event): 
      print 'event from TimerTest class' 
      print "The Elapsed event was raised at " , event.SignalTime 
      print '------------' 

     self.timer.Elapsed += on_timed_event  


class Delay(object): 

    def __init__(self,class_method): 
     self.delay = Timer() 
     self.delay.Interval= 2000 
     self.method= class_method 

    def on_timed_delay_event (self,sender, event): 
     print 'from Delay Class event handler' 
     print "event has elapsed event was raised at " , event.SignalTime 
     print 'addition results',self.method 
     print '------------' 

    def start(self): 
     print 'Delay timer Start' 
     self.delay.Elapsed += self.on_timed_delay_event 
     self.delay.Enabled= True 


def stop(self): 
self.delay.Enabled= False 
self.delay.Elapsed -= self.on_timed_delay_event 

class SimpleMath(object): 

    def __init__(self,a,b): 
     self.a =a 
     self.b =b 

    def add (self): 
     return self.a + self.b 

def main(): 

    a = TimerTest() 
    sm= SimpleMath(10,12) 
    print sm.add() 

    t= Delay(sm.add()) 
    t.start() 

if __name__ == '__main__': 
    main() 

我正在給我的問題添加更多的細節。類任務和請求被導入到包含MainForm類的模塊中。在MainForm中創建一個Request類的實例,該實例被傳遞給Tab類,該類使用它並將其傳遞給觸發事件時應執行任務的Task類。在下面的精簡列表中,self.myRequest.command1僅執行一次。我在self.params被分配執行後添加了一個打印,它打印None。有沒有特別的方法我應該通過self.myRequest.command1(arg1, arg2, arg3)

class Task(object): 
... 
    def execute(self, param) 
     self.params = param        #method to be executed periodically 
     print 'display self.params', self.params  #debugging message 

class Request (object): 
... 
    def command1(self, arg1, arg2, arg3) 

class Tab (object): 
    __init__(self,tabControl, myRequest): 
     self.myRequest= myRequest 
     self.myTask = Task() 
... 
    def send_task(self): 

     self.myTask.execute(self.myRequest.command1(arg1, arg2, arg3)) 

class MainForm(Form): 
    __init__(self): 
    ... 
    self.myRequest= Request() 
    self.tab=Tab(self.tabControl, self.myRequest) 
    ... 

回答

1

1.

class A: 
    def some_func(): 
    pass 

    def __init__(self): 
    self.init = 1 

    self.some_func() # just call member function 

2.No,你不需要()傳遞函數作爲參數 A類: 高清some_func(): 通

def func_of_func(func): 
    return fund() 

def main(): 
    a = A() 
    func_of_func(a.some_func) # no parentheses after some_func 
+0

我以爲我明白你的答案,但我有一個方法傳遞給另一個問題。我在我的特殊問題上添加了更多信息。 – cjbust