2013-09-26 64 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