बस "प्रकार" तीन मापदंडों का उपयोग कर, इस तरह में बनाया कहते हैं। मैं इसे अवांछित रखूंगा, क्योंकि संकेत हैं कि कुछ लोग यहां गतिशील रूप से कक्षाएं बनाने की कोशिश कर रहे हैं - जो ऊपर की रेखा है।
एक वर्ग एक की एक वस्तु बनाने के लिए एक संदर्भ भी, के रूप में स्वीकार किए जाते हैं जवाब में डाल दिया, एक बस वर्ग कॉल करनी होगी गया है:
instance = ClassObject()
इन्स्टेन्शियशन के लिए तंत्र इस प्रकार है:
इसकी क्लास ': बजाय इसे डाटा मॉडल एक वर्ग का एक instantance जब यह किसी अन्य प्रतिदेय रूप में एक ही वाक्य रचना के साथ कहा जाता है बनाने के लिए इस्तेमाल तंत्र बताते है - अजगर new
कीवर्ड कुछ भाषाओं का उपयोग का उपयोग नहीं करताविधि लागू की जाती है (कक्षा के मामले में, इसकी कक्षा "मेटाक्लास" है - जो आमतौर पर type
अंतर्निहित है)। इस कॉल का सामान्य व्यवहार कक्षा (तत्काल) स्थिर __new__
विधि को तत्काल कक्षा में विधि का आह्वान करना है, इसके बाद __init__
है। __new__
विधि स्मृति आवंटित करने के लिए ज़िम्मेदार है और इस तरह, और आमतौर पर __new__
object
द्वारा किया जाता है जो वर्ग पदानुक्रम रूट है।
तो बुला ClassObject()
invokes ClassObject.__class__.call()
(जो आम तौर type.__call__
हो जाएगा) इस __call__
विधि ClassObject ही पहले पैरामीटर के रूप में प्राप्त होगा - एक शुद्ध अजगर कार्यान्वयन इस तरह होगा: (CPython संस्करण, निश्चित रूप से है सी में किया, और cornercases के लिए अतिरिक्त कोड के बहुत सारे और अनुकूलन) के साथ
class type:
...
def __call__(cls, *args, **kw):
constructor = getattr(cls, "__new__")
instance = constructor(cls) if constructor is object.__new__ else constructor(cls, *args, **kw)
instance.__init__(cls, *args, **kw)
return instance
जड़ __new__
लिए अतिरिक्त पैरामीटर को दबा और अन्य वर्गों के लिए यह पारित करने के लिए (मैं डॉक्स पर देखकर याद नहीं है सही औचित्य (या तंत्र) - लेकिन यह "वास्तविक जीवन में" होता है - यदि object.__new__
किसी भी अतिरिक्त पैरामीट के साथ बुलाया जाता है यह मानते हुए कि Parent
पहले से मौजूद है हालांकि, एक __new__
के किसी भी कस्टम कार्यान्वयन सामान्य रूप से अतिरिक्त पैरामीटर)
क्या? 'उदाहरण = कक्षा()' ... –
मुझे लगता है कि आप गतिशील रूप से एक नई कक्षा बनाना चाहते हैं। किसी दिए गए वर्ग की वस्तु नहीं। – jsbueno
नया उदाहरण स्मृति में अपनी जगह के साथ एक नई वस्तु का मतलब है। अधिकांश भाषाएं 'नया' कीवर्ड का उपयोग करती हैं ताकि यह स्पष्ट हो कि ऑब्जेक्ट नया है और नए इंस्टेंस (ऑब्जेक्ट) गुणों को किसी अन्य उदाहरण के साथ संदर्भित/साझा नहीं किया गया है। – BillR