मैं एक इवेंट डिस्पैचर फ्रेमवर्क बना रहा हूं जो संदेशों को डीकोड करता है और उपयोगकर्ता कोड में वापस कॉल करता है। मेरे सी ++ पृष्ठभूमि पता चलता है कि मैं लिखने:क्या यह इडियोटिक पाइथन घटना हैंडलर कॉलबैक के लिए एक अमूर्त वर्ग का उपयोग करने के लिए है?
class Handler:
def onFoo(self):
pass
def onBar(self):
pass
class Dispatcher:
def __init__(self):
self.handler = Handler()
def run():
while True:
msg = decode_message() # magic
if msg == 'foo':
handler.onFoo()
if msg == 'bar':
handler.onBar()
तब ढांचे उपयोगकर्ता की तरह कुछ लिखते थे:
class MyHandler(Handler):
def onFoo(self):
do_something()
dispatcher = Dispatcher()
myHandler = MyHandler()
dispatcher.handler = myHandler
dispatcher.run()
लेकिन मैं यह भी onFoo()
और onBar()
Dispatcher
के तरीके के रूप में डाल और उपयोगकर्ता उन्हें बदलने के कल्पना कर सकते हैं अन्य तरीकों के साथ। फिर उपयोगकर्ता का कोड लगेगा जैसे:
def onFoo():
do_something()
dispatcher = Dispatcher()
dispatcher.onFoo = onFoo
मैं भी Dispatcher.onFoo
callables की एक सूची बना सकते हैं, तो उपयोगकर्ता सी # में की तरह एक से अधिक हैंडलर देते हैं सकता है।
ऐसा करने का सबसे पाइथोनिक तरीका क्या है?
आप इवेंट डिस्पैचर फ्रेमवर्क क्यों बना रहे हैं? बहुत पहले से मौजूद हैं। – Marcin
मैं कुछ भी सामान्य उद्देश्य नहीं बना रहा हूं - मैंने शायद परियोजना को वास्तव में उससे बड़ा ध्वनि बनाया है। यह सिर्फ एक मैसेजिंग परत है जो प्रोटोकॉल बफर संदेशों को डीकोड करता है और उपयुक्त कार्यों को कॉल करता है। – japreiss
थोड़ा और विस्तार करने के लिए: मैं तीसरे पक्ष के पुस्तकालयों पर बहुत अधिक भरोसा करना टालना चाहता हूं क्योंकि मुझे पहले से ही मेरी कंपनी के बड़े स्वामित्व कोड बेस में उन्हें कुछ दर्द का सामना करना पड़ा है। मैं पुस्तकालयों को झुकाव और इनवेंटेड कोड के साथ बदलने की संभावना रखना चाहता हूं। – japreiss