पसंद का मेरा टेक्स्ट संपादक पायथन प्लगइन के माध्यम से एक्स्टेंसिबल है। मुझे कक्षाओं का विस्तार करने और इसकी विधियों को ओवरराइड करने की आवश्यकता है। सामान्य संरचना नीचे स्निपेट की तरह दिखती है। ध्यान दें कि फ़ंक्शन हस्ताक्षर निश्चित है।कक्षाओं के बाहर परिवर्तनीय दायरा
ftp_client
दोनों वर्गों के उदाहरणों द्वारा साझा किया जाना चाहिए।
ftp_client = None
class FtpFileCommand(sublime_plugin.TextCommand):
def run(self, args):
global ftp_client # does it reference the variable of the outer scope?
self.ftp_client = ftplib.FTP('foo')
# login and stuff
class FtpFileEventListener(sublime_plugin.EventListener):
def run(self, args):
global ftp_client # same for this
self.ftp_client.quit() #
इन दोनों कक्षाओं में एक चर सामान्य है। चर साझा करने के लिए सबसे अच्छा अभ्यास क्या है?
संपादित madjars के आधार पर उत्तर दें:
FtpFileCommand.run
पहले कहा जाता है, ftp_client
instanciates और एक आकर्षण की तरह काम करता है। FtpFileEventListener.run
को बाद में बुलाया जाता है और, ftp_client
पूरी तरह से संदर्भित कर सकता है लेकिन यह अभी भी None
है। वैश्विक कीवर्ड का उपयोग करके, क्या यह चर को सदस्य के रूप में self
में जोड़ता है?
आपके संपादन में दूसरे प्रश्न का उत्तर देने के लिए: 'ftp_client' बनाना एक आवृत्ति विशेषता ग्लोबल्स का उपयोग करने के उद्देश्य को हरा देती है। नया 'एफ़टीपी' ऑब्जेक्ट इसे वैश्विक रूप में घोषित करने के बाद 'ftp_client' चर को असाइन किया जाना चाहिए। इसके बाद, इसे वैश्विक रूप से घोषित करने की आवश्यकता के बिना कहीं से भी संदर्भित किया जा सकता है, उदा। 'Ftp_client.quit()'। – ekhumoro