python - Overriding __init__ in threading.Thread -


इस अधोलेखित threading.Thread subclass की जांच करना और थोड़ा मार्गदर्शन की आवश्यकता है।

क्लास क्या करता है इसकी मेरी समझ:

  "" फिर से लोड करें मॉड्यूल अगर यह अंतिम रूप से संकलित होने के बाद अपडेट किया गया है। "" "  

कोड: <पूर्व> वर्ग होटस्पेप (थ्रेडिंग। थ्रेड): def __init __ (स्वयं, आउट, मोड, जन = 'उत्पन्न', * आर्ग्स, ** क्वार्ज): self.out = out # यह एक है आउटपुट गंतव्य self.mod = mod self.genname = gen # यह "mod" से एक जनरेटर है self.gen = getattr (mod, self.genname) (* args, ** kwargs) self.loaded = self.current_modtime self .args = args self.kwargs = kwargs थ्रेडिंग। थ्रेड .__ init __ (स्वयं) self.daemon = True @property def current_modtime (self): वापस os.path.getmtime (self.mod .__ फ़ाइल __. replace ("pyc", " पीई ")) डीईएफ रन (स्वयं): जबकि सच: अगर self.current_modtime! = Self.loaded: log.info (" हॉट-स्ैपिंग मॉड्यूल:% s ", self.mod .__ नाम__) self.mod = reload (self .mod) self.loaded = self.current_modtime स्व .gen = getattr (self.mod, self.genname) (* self.args, ** self.kwargs) self.handle (self.gen.next ()) def हैंडल (स्वयं, एएमएम): self.out (elem )

यह क्लास को कॉल का एक उदाहरण है:

  होटस्पेप (InfoHandler.add, info, 'generate', info_queue, first_frame)। स्टार्ट ()   

जहां InfoHandler एक टॉरनाडियोज़ सॉकेट बनाता है, जानकारी एक मॉड्यूल है, उत्पन्न इसकी विधि और info_queue, first_frame < / कोड> हैं * args।

मुझे जो समझ में नहीं आ रहा है वह कैसे आउट, मोड, जन = 'जनरेट करें' टाइप करें थ्रेडिंग। थ्रेड ' समूह = कोई नहीं, लक्ष्य = कोई नहीं, नाम = कोई नहीं । समूह, लक्ष्य और नाम को उनके डिफ़ॉल्ट (कोई नहीं) के रूप में प्रारंभ किया जाता है जब थ्रेडिंग। थ्रेड .__ init __ (स्वयं) रन?

यदि आप थ्रेडिंग के लिए प्रलेखन देखते हैं। , आप देखेंगे

  थ्रेडिंग। धागा (समूह = कोई नहीं , लक्ष्य = कोई नहीं, नाम = कोई नहीं, आर्ग्स = (), kwargs = {})   

तो हाँ, उन मानों को कोई नहीं पर सेट हो जाएगा जब superclass ' __ init __ कहलाता है।

__ निर्देश __ प्रश्न थोड़ा अधिक जटिल है। निम्नलिखित कोड (मैं अपने प्रश्न के रूप में स्पष्टता के लिए उसी नाम का प्रयोग करता हूं):

  वर्ग थ्रेड (ऑब्जेक्ट): def __init __ (आत्म, ए = कोई नहीं): self.a = a def b (स्वयं): पास वर्ग होटस्पेप (थ्रेड): def __init __ (आत्म, एक्स = कोई नहीं): प्रिंट ("पहले init: {}"। प्रारूप (स्वयं .__ dict__)) self.x = x super (Hotswap, self) __इनट __ () प्रिंट ("init: {}"। प्रारूप (स्वयं .__ dict__)) def y (स्वयं): पास प्रिंट ("हॉटस्पेप वर्ग में: {}"। प्रारूप (hotswap .__ dict__)) h = हॉटस्पेप () प्रिंट ("Hotswap उदाहरण: {}" पर। प्रारूप (एच। डिक्टो_))   

आउटपुट कुछ ऐसा होगा:

  हॉटस्पेप वर्ग पर : init: {} के बाद init: {'y': & lt; फ़ंक्शन y 0x24b9bc & gt ;, '__module__': '__main__', '__doc__': कोई नहीं, '__init__': 0x24b97c पर फ़ंक्शन __init__ & gt;} init: {} एक ': कोई भी नहीं,' एक्स ': कोई नहीं} हाट्स्पेव उदाहरण पर: {' ए ': कोई भी नहीं,' एक्स ': कोई नहीं}   

जैसा कि आप देख सकते हैं, यह इसमें शामिल नहीं है सुपरक्लास (या अपनी खुद की) विशेषताएँ जब तक कि आप उसे एक उदाहरण पर कॉल न करें।

Comments

Popular posts from this blog

php - PDO bindParam() fatal error -

logging - How can I log both the Request.InputStream and Response.OutputStream traffic in my ASP.NET MVC3 Application for specific Actions? -

java - Why my included JSP file won't get processed correctly? -