मैं क्लास में एक कन्स्ट्रक्टर को कॉल कर रहा हूं और यदि कोई निश्चित शर्त पूरी हो जाती है तो परिणामी वस्तु एक अलग वर्ग (कक्षाबी) का होना चाहती है। मैंने पहले तर्क को __init __() (नीचे दिए गए उदाहरण में 'स्वयं') __init __() के भीतर पहली तर्क को बदलने का प्रयास किया है, लेकिन ऐसा लगता है कि मैं जो चाहता हूं वह ऐसा नहीं लगता है।किसी भिन्न ऑब्जेक्ट के साथ __init __() में किसी उदाहरण को प्रतिस्थापित कैसे करें?
मुख्य में:
import ClassA
my_obj = ClassA.ClassA(500)
# unfortunately, my_obj is a ClassA, but I want a ClassB!
ClassA में
/__ init__.py:
import ClassB
class ClassA:
def __init__(self,theirnumber):
if(theirnumber > 10):
# all big numbers should be ClassB objects:
self = ClassB.ClassB(theirnumber)
return
else:
# numbers under 10 are ok in ClassA.
return
ClassB में/__ init__.py:
class ClassB:
pass
ठीक है, अब क्या होगा यदि मैं ऑब्जेक्ट विधि के अंदर किसी ऑब्जेक्ट विधि के अंदर ऑब्जेक्ट को स्वैप करना चाहता हूं, तो कन्स्ट्रक्टर में? मैं एक वस्तु चाहता हूं जो अपने जीवन चक्र के दौरान अन्य वस्तुओं में बदल जाए। – sneak
@ चुपके, आप नहीं कर सकते: विधि 'स्वयं' को एक तर्क के रूप में प्राप्त करती है और इसलिए जो भी वे ब्रेनैम कहने के लिए पुनरुत्थान कर सकते हैं, इसका विधि के बाहर कोई प्रभाव नहीं पड़ेगा। (आप निश्चित रूप से ** योग्य ** नाम जैसे 'स्वयं .__ वर्ग__' नामांकित कर सकते हैं - योग्य नाम और बैरेनम्स केवल हर सम्मान में बिल्कुल अलग हैं) जो आप सोच सकते हैं। –
@ एलेक्स, तथ्य यह है कि आप 'स्वयं .__ वर्ग__' को असाइन कर सकते हैं, सीपीथॉन में कार्यान्वयन का दुर्घटना है; आधिकारिक पायथन spec का कहना है कि यह * काम नहीं करना चाहिए। यहां तक कि अगर यह दुर्घटना नहीं थी, तो यह करने के लिए एक बहुत ही भयानक बात है। संक्षेप में: कृपया मत करो, और विशेष रूप से कृपया अन्य लोगों को यह सुझाव न दें। – habnabit