我想創建Class結構,其中流程由事件生成進行控制。爲此,我做了以下內容:在python中引發異步事件
class MyEvent:
EventName_FunctionName = {}
@classmethod
def setup(cls, notificationname, functionname):
if notificationname in MyEvent.EventName_FunctionName.keys():
MyEvent.EventName_FunctionName[notificationname].append(functionname)
else:
MyEvent.EventName_FunctionName[notificationname] = [functionname]
@classmethod
def runonnotification(cls, notificationname, *args):
thisfunclist = MyEvent.EventName_FunctionName[notificationname]
for func in thisfunclist:
if len(args) > 0:
func(*args)
else:
func()
,然後使用它的方式如下:
from FirstEventClass import MyEvent
class simpleexample:
def __init__(self,a = 1, b = 2):
simpleexample.a = a
simpleexample.b = b
MyEvent.setup('greater than 100',self.printerror)
MyEvent.setup('dont do negative',self.negation)
MyEvent.setup('many values recieved',self.handlemultipleupdates)
def updation(self,updateval):
if updateval > 100:
MyEvent.runonnotification('greater than 100',updateval)
self.a = updateval
if updateval < 0:
MyEvent.runonnotification('dont do negative')
def multipleupdates(self, a, b):
MyEvent.runonnotification('many values recieved', a , b)
def printerror(self,data):
print ' something has gone wrong' ,data
def negation(self):
print 'negation enter'
self.a = -self.a
def handlemultipleupdates(self, a , b):
print 'wow'
self.a = a
self.b = b
不過,我的問題是,基本上所有這些事件都是函數調用和shortwhile後,我構建一個巨大的遞歸調用堆棧。我如何在通知事件的同時退出函數,或者在後臺線程上繼續運行現有函數。
可以包括使用這些類的一些代碼? – Claudiu
爲什麼你使用類屬性和類方法,而不是有一個普通的實例,或只是使全局?這聽起來像你正試圖用Python編寫Java。 – abarnert