में examplemethods में विशेषताओं को जोड़ना कक्षा-सजावट करने वाले और विधि-सजावटी को अच्छी तरह से खेलने के लिए प्रयास करते समय मैं इस व्यवहार में घुस गया। अनिवार्य रूप से, विधि सजावटी कुछ विधियों को विशेष रूप से कुछ डमी मूल्य के साथ ध्वजांकित करेंगे, और कक्षा सजावट बाद में मूल्य में भर जाएगा और बाद में मूल्य भर जाएगा। इस सरल उदाहरण हैपायथन
>>> class cow:
>>> def moo(self):
>>> print 'mooo'
>>> moo.thing = 10
>>>
>>> cow.moo.thing
10
>>> cow().moo.thing
10
>>> cow.moo.thing = 5
AttributeError: 'instancemethod' object has no attribute 'thing'
>>> cow().moo.thing = 5
AttributeError: 'instancemethod' object has no attribute 'thing'
>>> cow.moo.__func__.thing = 5
>>> cow.moo.thing
5
किसी को भी क्यों cow.moo.thing = 5
काम नहीं करता है पता है, भले ही cow.moo.thing
काफी स्पष्ट रूप मुझे 10 देता है? और क्यों cow.moo.__func__.thing = 5
काम करता है? मुझे नहीं पता कि यह क्यों करता है, लेकिन dir(cow.moo)
सूची में सामान के साथ यादृच्छिक रूप से झुकाव में कुछ काम करने की कोशिश कर रहा है, और मुझे नहीं पता कि क्यों।
आह ठीक है, मैं कभी नहीं जानता था। धन्यवाद! –
पुरानी पोस्ट को पुनर्जीवित करने के लिए खेद है लेकिन पायथन 3 'गाय() में। Moo.thing = 5' वापस लौट रहा है' विशेषता त्रुटि: 'विधि' ऑब्जेक्ट में कोई विशेषता नहीं है 'चीज़'। तुम जानते हो क्यों ? –
@JacquesGaudin उदाहरण पर ('गाय()। Moo') फ़ंक्शन को पायथन के किसी भी संस्करण में विधि ऑब्जेक्ट में लपेटा जाता है - अंतर वर्ग (' cow.moo') पर होता है, यह पायथन 3 में लपेटा नहीं जाता है। 'स्वयं' को फ़ंक्शन में स्वचालित रूप से पारित करने के लिए रैपिंग आवश्यक है। – agf