dynamic - Dynamically assign special methods to objects but not classes in Python -


मैं निम्न कार्य करना चाहूंगा:

  वर्ग ए (ऑब्जेक्ट): पास = ए () एक .__ int__ = लैम्ब्डा आत्म: 3 मैं = इंट (ए)  

दुर्भाग्य से, यह फेंकता है:

  ट्रेसबैक (सबसे हाल ही में कॉल अंतिम ): फ़ाइल "& lt; stdin & gt;", पंक्ति 1, & lt; मॉड्यूल & gt; TypeError: int () तर्क एक स्ट्रिंग या एक संख्या होनी चाहिए, नहीं 'ए'  

यह केवल काम करने के लिए लगता है अगर मैं क्लास ए को "विशेष" विधि आवंटित करने के बजाय एक उदाहरण इसके बारे में क्या कोई सहारा है?

एक तरह से मैंने सोचा था कि:

  def __int __ (स्वयं): # कोई असीम लूप अगर प्रकार (आत्म) .__ int__। Im_func! =  

धन्यवाद। धन्यवाद।

पायथन हमेशा क्लास पर विशेष विधियों को दिखता है, उदाहरण के लिए नहीं (पुरानी, ​​उर्फ ​​"विरासत", वर्गों की तरह - वे नापसंद हो गए हैं और पायथन 3 में चले गए हैं, क्योंकि इस तरह की शब्दावली की वजह से अधिकतर उदाहरणों पर विशेष विधियों को देखने से आता है, इसलिए आप वास्तव में नहीं उनको उपयोग करना चाहते हैं, मुझे विश्वास करो! -)।

एक विशेष वर्ग बनाने के लिए, जिनके उदाहरणों में एक दूसरे से स्वतंत्र विशेष विधियां हो सकती हैं, आपको प्रत्येक उदाहरण को अपनी कक्षा देना होगा - तब आप उदाहरण के (व्यक्तिगत) पर विशेष विधियों को असाइन कर सकते हैं < Em> वर्ग अन्य उदाहरणों को प्रभावित किए बिना, और कभी भी बाद में खुशी से रहते हैं यदि आप इसे देखना चाहते हैं कि आप उदाहरण के लिए एक विशेषता को निर्दिष्ट कर रहे हैं, जबकि वास्तव में व्यक्तिगत प्रति-उदाहरण वर्ग की विशेषता को निर्दिष्ट करते हुए, आप इसे विशेष __ सेटैट्र __ कार्यान्वयन के साथ प्राप्त कर सकते हैं पाठ्यक्रम।

स्पष्ट "वर्ग को असाइन करें" वाक्यविन्यास के साथ, यह सरल मामला है:

  & gt; & gt; & gt; वर्ग व्यक्तिगत व्यक्ति (वस्तु): ... def __init __ (स्वयं): ... आत्म .__ class__ = type ('GottaBeMe', (स्व .__ वर्ग__, ऑब्जेक्ट), {}) ... & gt; & gt; & gt; ए = इंडिजिलिस्ट ()> gt; & gt; & gt; बी = इंडिजिलिस्ट ()> & gt; & gt; & gt; एक .__ कक्षा __.__ int__ = लैम्ब्डा आत्म: 23> gt; & gt; & gt; बी .__ कक्षा __.__ int__ = लैम्ब्डा आत्म: 42 & gt; & gt; & gt; इंट (ए) 23 & gt; & gt; & gt; इंट (बी) 42 & gt; & gt; & gt;  

और यहां फैंसी संस्करण है, जहां आप इसे "इसे दिखाना" कहते हैं, आप एक विशेष विशेषता को एक उदाहरण के रूप में निर्दिष्ट कर रहे हैं (जबकि दृश्य के पीछे यह अभी भी कक्षा की जाती है) :

  & gt; & gt; & gt; वर्ग परिष्कृत (इंडिजिलिस्ट): ... def __setattr __ (आत्म, एन, वी): ... यदि n [: 2] == '__' और n [-2:] == '__' और n = = ' __class__ ': ... सेटैट्रर (आत्म .__ वर्ग__, एन, वी) ... और: ... वस्तु .__ सेटैट्र __ (आत्म, एन, वी) ... & gt; & gt; & gt; सी = परिष्कृत () & gt; & gt; & gt; D = परिष्कृत ()> gt; & gt; & gt; सी .__ int__ = लैम्ब्डा स्व: 54> gt; & gt; & gt; डी .__ int__ = लैम्ब्डा स्व: 88> gt; & gt; इंट (सी) 54 & gt; & gt; & gt; इंट (डी) 88  

Comments

Popular posts from this blog

Indexing in SQL -

objective c - iPhone and it's wireless area -

multithreading - Do lock objects in Java need to be static? -