किस वर्ग को नष्ट करते समय? हालांकि आपने मॉड्यूल कहा था?
आपका मॉड्यूल तब तक रहता है जब तक दुभाषिया बंद नहीं हो जाता। आप उस समय "atexit" मॉड्यूल का उपयोग कर पर चलाने के लिए कुछ जोड़ सकते हैं:
import atexit
atexit.register(myfunction)
संपादित करें: अपनी टिप्पणी के आधार पर।
चूंकि आप इसे विनाशक के रूप में नहीं चाहते हैं, तो मेरा उत्तर सही है। अपनी परिभाषा पर
def close_database():
proceed_to_close()
import atexit
atexit.register(close_database)
अब एक त्वरित नोट: बस (यदि आप चाहें या स्थिर विधि) एक और समारोह डीईएफ़ और atexit से पंजीकृत करें।
आपने कहा कि कक्षा में कोई उदाहरण नहीं है। तो इसे कक्षा क्यों बनाते हैं? इसके बजाय मॉड्यूल स्तर में फ़ंक्शंस को परिभाषित क्यों नहीं करें? मॉड्यूल प्रथम श्रेणी की वस्तुओं, कैश की गई और केवल एक बार आयातित रहे हैं ...
उदाहरण के लिए, बजाय database.py
को परिभाषित करने की:
class DataBase(object):
@staticmethod
def execute_some_query(query):
code_here()
some_code()
@staticmethod
def close_database():
proceed_to_close()
import atexit ; atexit.register(DataBase.close_database)
और का उपयोग कर:
from database import DataBase
DataBase.execute_some_query(query)
आप इस बजाय database.py
पर कर सकता है :
def execute_some_query(query):
code_here()
some_code()
def close_database():
proceed_to_close()
import atexit ; atexit.register(close_database)
और इसका उपयोग वें है:
import database
database.execute_some_query(query)
या बेहतर अभी तक: उपयोग sqlalchemy और अपने खुद के डेटाबेस इंटरफेस बनाने के सभी इस मुसीबत से बचने के।
"मॉड्यूल हटाना" से आपका क्या मतलब है? आपको ऐसा कब लगता है? –
हमारे पास एक साधारण वर्ग है जिसमें केवल स्थिर सदस्य कार्य हैं और मॉड्यूल को अनलोड करते समय डेटाबेस कनेक्शन को साफ़ करने की आवश्यकता है। उम्मीद कर रहा था कि मॉड्यूल या कक्षाओं के लिए __del__ विधि होगी जिसमें उदाहरण नहीं हैं? – Dan
@Dan: कृपया नई जानकारी के साथ प्रश्न अपडेट करें; अपने खुद के प्रश्न पर टिप्पणी मत करो। इसके अलावा, मॉड्यूल को उतारने के लिए उपयोग केस क्या है? आप ऐसा क्यों करेंगे? –