मेरे पास कुछ विधियों के साथ एक कक्षा है, जिनमें से कुछ केवल तभी वैध हैं जब वस्तु किसी विशेष स्थिति में होती है। मैं, विधियों, जब वे एक उपयुक्त राज्य में नहीं कर रहे हैं बस वस्तुओं के लिए बाध्य नहीं किया जा करना चाहते हैं ताकि मैं की तरह कुछ मिलता है:क्या पाइथन में ऑब्जेक्ट (कक्षा नहीं) से कोई विधि हटाना संभव है?
>>> wiz=Wizard()
>>> dir(wiz)
['__doc__', '__module__', 'addmana']
>>> wiz.addmana()
>>> dir(wiz)
['__doc__', '__module__', 'addmana', 'domagic']
>>> wiz.domagic()
>>> dir(wiz)
['__doc__', '__module__', 'addmana']
>>> wiz.domagic()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Wizard instance has no attribute 'domagic'
मैं पद्धतियां जोड़ने का तरीका (types.MethodType (देख सकते हैं विधि, वस्तु)), लेकिन मैं सिर्फ एक वस्तु के लिए एक विधि को हटाने के लिए किसी भी तरह से नहीं देख सकते हैं:
>>> wiz.domagic
<bound method Wizard.domagic of <__main__.Wizard instance at 0x7f0390d06950>>
>>> del wiz.domagic
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: Wizard instance has no attribute 'domagic'
अधिभावी __dir__ (और एक InvalidState या संदर्भ पर AttributeError के बजाय मंगलाचरण पर NotEnoughMana अपवाद हो रही) हो सकता है ठीक है, लेकिन मैं नहीं देख सकता कि डीआईआर() के अंतर्निहित व्यवहार की नकल कैसे करें। (आदर्श रूप में मैं एक तरीका पसंद करता हूं जो पाइथन 2.5 में भी काम करता है)
विचार?
वैकल्पिक रूप से, विधि को हटाने का प्रयास करने के बजाय, एक विधि जोड़ें जो केवल 'पास' है। जब आप जादू चाहते हैं तो नोप विधि हटाएं। – outis