मुझे आशा है कि किसी को इस अजगर का एक अच्छा गहरी समझ :)एक उदाहरण पर अधिभावी विशेष तरीकों
निम्नलिखित कोड पर विचार करें है कि जवाब कर सकते हैं:
>>> class A(object):
... pass
...
>>> def __repr__(self):
... return "A"
...
>>> from types import MethodType
>>> a = A()
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>> setattr(a, "__repr__", MethodType(__repr__, a, a.__class__))
>>> a
<__main__.A object at 0x00AC6990>
>>> repr(a)
'<__main__.A object at 0x00AC6990>'
>>>
सूचना कैसे रेपर (क) उपज नहीं है "ए" का अपेक्षित परिणाम? मुझे पता है क्यों यह मामला है चाहते हैं और अगर वहाँ इस लक्ष्य को हासिल करने के लिए एक तरह से ...
मैं इसके विपरीत है, निम्न उदाहरण हालांकि काम करता है (हो सकता है कि क्योंकि हम एक विशेष विधि ओवरराइड करने के लिए कोशिश नहीं कर रहे?):
>>> class A(object):
... def foo(self):
... return "foo"
...
>>> def bar(self):
... return "bar"
...
>>> from types import MethodType
>>> a = A()
>>> a.foo()
'foo'
>>> setattr(a, "foo", MethodType(bar, a, a.__class__))
>>> a.foo()
'bar'
>>>
यदि आप कहते हैं कि आप आखिरकार क्या हासिल करने की कोशिश कर रहे हैं तो आपको शायद अधिक प्रबुद्ध प्रतिक्रिया मिलेगी। – mattmanser
नई शैली के वर्गों के लिए, उदाहरण के बजाए कक्षा पर विशेष तरीकों को देखा जाता है। अधिक जानकारी के लिए और कुछ कामकाज के लिए नीचे मेरा उत्तर देखें। –
मैं वर्णन नहीं कर सका कि मैं विस्तार से क्या करना चाहता हूं। माफ़ कीजिये। लेकिन संक्षेप में, मैं एक प्रोटोटाइप ओओ मॉडल मॉडल करने की कोशिश कर रहा हूं जहां मैं ऑपरेटर कर सकता हूं जैसे: वर्ल्ड = ऑब्जेक्ट() क्लोन()। मिक्सीन (वर्ल्ड); जहां दुनिया उन विधियों के संग्रह के साथ एक वर्ग है जो ऑब्जेक्ट.क्लोन() उदाहरण में ओवरराइड/प्रतिस्थापित करता है। –