0

我附上了几个类定义的一些代码列表。我的目标是创建一个带有事件处理程序的类,该事件处理程序可以在 Timer 过去时重复任务。在 TimerClass 中,我on_timed_event在类中定义了一个方法__init__。我在主函数中实例化了一个 TimerTest 类,a = TimerTest()我发现这也执行了事件处理程序。

问题 1. 这是一种在创建对象实例时自动执行函数的方法吗?

问题 2. 我想将 ClassA.method1 传递给 ClassB。我在下面main ()传递sm.add()延迟课程的方式是否正确?是否可以在一行中即时创建延迟类的实例并将其传递给类实例 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()

我正在为我的问题添加更多细节。类 Task 和 Request 被导入到包含 MainForm 类的模块中。在 MainForm 中,我创建了一个 Request 类的实例,该实例被传递给使用它的 Tab 类,并将其传递给 Task 类,该类应该在触发事件时执行任务。在下面的精简列表中,self.myRequest.command1 仅被执行一次。在执行内部分配 self.params 并打印后,我添加了一个 print 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)
    ...
4

1 回答 1

1

1.

class A:
  def some_func():
    pass

  def __init__(self):
    self.init = 1

    self.some_func() # just call member function

2.不,您不需要()将函数作为参数传入类 A: def some_func(): pass

def func_of_func(func):
  return fund()

def main():
  a = A()
  func_of_func(a.some_func) # no parentheses after some_func
于 2013-09-26T02:03:00.247 回答