मान लें कि हमारे पास k
प्रकार class A
है। हमने एक दूसरे class B(A)
को परिभाषित किया। ऑब्जेक्ट k
से class B
पर "कन्वर्ट" करने का सबसे अच्छा अभ्यास क्या है और k
में सभी डेटा को सुरक्षित रखें?पायथन ऑब्जेक्ट रूपांतरण
उत्तर
यह "वर्ग रूपांतरण" करता है, लेकिन यह संपार्श्विक क्षति के अधीन है। एक और ऑब्जेक्ट बनाना और __dict__
को बदलना क्योंकि ब्रेनकोर पोस्ट सुरक्षित होगा - लेकिन यह कोड जो आपने पूछा है, कोई नई वस्तु नहीं बनाई जा रही है।
class A(object):
pass
class B(A):
def __add__(self, other):
return self.value + other
a = A()
a.value = 5
a.__class__ = B
print a + 10
a = A() # parent class
b = B() # subclass
b.value = 3 # random setting of values
a.__dict__ = b.__dict__ # give object a b's values
# now proceed to use object a
क्या यह आपके उपयोग के मामले को पूरा करेगा? नोट: केवल बी के आवृत्ति चर ऑब्जेक्ट ए से उपलब्ध नहीं होंगे, कक्षा बी के वर्ग चर नहीं। इसके अलावा, एक में संशोधित चर, ख में चर को संशोधित करेगा जब तक आप एक deepcopy कार्य करें:
import copy
a.__dict__ = copy.deepcopy(b.__dict__)
असल में, कोई चर कॉपी नहीं किया जाएगा। चूंकि 'ए' और 'बी' अब दोनों' __dict__' साझा करते हैं, 'a.value'' b.value' को भी बदलते हैं। –
आप सही, सही, धन्यवाद हैं। – BrainCore
असल में ऐसा करने पर, "ए" वस्तु तुरंत नष्ट होनी चाहिए। अन्य एक ही गुणों को साझा करने वाले विभिन्न वर्गों में, दो अलग-अलग वस्तुओं के साथ समाप्त होता है - इससे कुछ खराब परिदृश्य हैं। (इंटरैक्टिव प्रॉम्प्ट पर भी खेलने के लिए डरावना है) – jsbueno
- 1. ऑब्जेक्ट रूपांतरण पैटर्न
- 2. पायथन प्रकार रूपांतरण
- 3. पायथन प्रतिबिंब और प्रकार रूपांतरण
- 4. पायथन स्ट्रिंग.template ऑब्जेक्ट से स्ट्रिंग
- 5. पायथन: दशमलव रूपांतरण करने के लिए द्विआधारी
- 6. पायथन ऑब्जेक्ट सृजन
- 7. पायथन ग्लाइड ग्लैडएक्सएमएल ऑब्जेक्ट
- 8. पायथन 'सेट' ऑब्जेक्ट इंडेक्सिंग
- 9. पायथन ऑब्जेक्ट दृढ़ता
- 10. पायथन - ग्रुपबी ऑब्जेक्ट
- 11. पायथन थ्रेडसेफ ऑब्जेक्ट कैश
- 12. पायथन मॉडल ऑब्जेक्ट सत्यापन
- 13. पायथन ऑब्जेक्ट @property
- 14. पायथन फ़ाइल ऑब्जेक्ट
- 15. रूपांतरण कन्स्ट्रक्टर बनाम रूपांतरण ऑपरेटर: प्राथमिकता
- 16. रूपांतरण
- 17. रूपांतरण
- 18. रूपांतरण
- 19. sccs2svn रूपांतरण
- 20. पायथन जल्दी हैश म्यूटेबल ऑब्जेक्ट
- 21. पायथन सी-एपीआई ऑब्जेक्ट आवंटन
- 22. गैर-ऑब्जेक्ट पायथन स्मृति रिसाव
- 23. पायथन: जेनरेटर ऑब्जेक्ट पर गुण
- 24. पायथन ऑब्जेक्ट डेटाबेस की सूची
- 25. सी # मेमोरी ऑब्जेक्ट पर लाइव xslt रूपांतरण कैसे करें?
- 26. पायथन: असीसी चरित्र <-> दशमलव प्रतिनिधित्व रूपांतरण
- 27. सीएसवी क्रमबद्धता/रूपांतरण
- 28. svg 2 dxf रूपांतरण
- 29. सी # निहित रूपांतरण
- 30. सुरक्षित रूपांतरण
आप किस तरह से एक से दूसरे में परिवर्तित करना चाहते हैं? क्या आप कक्षा बी ऑब्जेक्ट के सभी सदस्य चर रखना चाहते हैं, लेकिन पैरेंट क्लास ए के तरीकों के सेट का उपयोग करें? – BrainCore
क्या यह सुंदर गरीब बहुरूपता है? एक आम superclass के ए और बी subclasses हैं? यदि हां, तो यह गलत बात है? क्या आप चाहते हैं कि बी के समान तरीके हों? यह एकाधिक विरासत के माध्यम से किया जाता है। कृपया बताएं कि आपको क्यों लगता है कि आपको इसकी आवश्यकता क्यों है क्योंकि - पायथन में - यदि आप सोचते हैं कि आपको कास्टिंग या टाइप रूपांतरण की आवश्यकता है तो आप इसे गलत कर रहे हैं। –
आपके उपयोग के मामले के बारे में भी वास्तव में उत्सुक है। क्या यह सिर्फ मस्ती के लिए है, या क्या आपको क्लासिकल पॉलिमॉर्फिज्म की मदद से कुछ समस्या का समाधान करने का बेहतर तरीका मिल गया है? –