2011-12-07 17 views
6
class ClassA: pass 
mytype = type(ClassA) 

Mytype का उपयोग करके, आप क्लासए का उदाहरण कैसे बनाते हैं?एक उदाहरण बनाएं, मेरे पास पहले से ही

ध्यान दें कि मैं नहीं मेरा उत्तर :)

instance = ClassA() 

मुझे पता है कि इस उदाहरण में, कि तुम सब लेकिन मान लीजिए कि आप इस प्रकार के (MyType) है करने की आवश्यकता है के रूप में इस के लिए देख रहा हूँ , आप इसके बारे में कुछ नहीं जानते हैं, और आपको इसका एक उदाहरण बनाने की आवश्यकता है।

मैंने केवल mytype() को कॉल करने का प्रयास किया और यह बताता है कि उस प्रकार() में 1 या 3 तर्क लेते हैं। मुझे लगता है कि ये तर्क किसी भी तर्क से संबंधित हो सकते हैं जिसे आप बनाए गए ऑब्जेक्ट की init विधि में पारित करना चाहते हैं।

नोट: मैंने अपने प्रश्नों को पूरी तरह से योग्य नाम का प्रतिनिधित्व करने वाली स्ट्रिंग दिए गए ऑब्जेक्ट को बनाने के तरीके के बारे में कई प्रश्नों को देखा है। ध्यान दें कि यहां, मेरे पास पहले से एक प्रकार है इसलिए यह थोड़ा अलग है? मुझे लगता है?

संपादित करें ... मैं आशा व्यक्त की थी कि मैं निम्नलिखित नेट कोड के बराबर कर सकता है:

class A {} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Type type = typeof(A); 

     // Given the type, I can create a new instance 
     object new_instance = Activator.CreateInstance(type); 
    } 
} 

मैं मान लिया था कि अजगर में, प्रकार (ClassA) वापस कुछ दे दिया है कि मैं बाद में इस्तेमाल कर सकते हैं कक्षा ए का एक उदाहरण बनाने के लिए। ऐसा लगता है कि मैंने अजगर में प्रकार को गलत समझा।

+1

MyType = प्रकार (ClassA) यदि आप एक वर्ग वस्तु दे देंगे। मुझे संदेह है कि यह तुम्हारा मतलब नहीं है। –

+0

मेरा मतलब है, मुझे लगता है :) मेरे संपादन को नेट के साथ देखें। उदाहरण के लिए यदि यह कुछ भी स्पष्ट करने में मदद करता है। –

उत्तर

14

कुछ आप एक नई शैली वर्ग के लिए इसका इस्तेमाल करते हैं, यह काम करेगा:

class ClassA(object): 
    pass 

o = ClassA() 
mytype = type(o) 
new_object = mytype() 
+0

यह जो कुछ मैं ढूंढ रहा था उसके करीब है। धन्यवाद! –

+1

... लेकिन जाहिर है कि अगर आप '__init __()' में पैरामीटर को मानते हैं – Basic

4

इस प्रश्न का कोई मतलब नहीं है। type(X) आपको X का प्रकार बताता है, और वापसी मूल्य में X, type("abc"), पर, स्प्रेफिश क्लास X के बारे में कोई जानकारी नहीं है, जिसमें तर्क के रूप में उपयोग की जाने वाली स्ट्रिंग के बारे में कोई जानकारी नहीं है।

जब तक श्रेणी X में कस्टम मेटाक्लास नहीं है, तो उत्तर हमेशा type होगा, क्योंकि यह पाइथन में डिफ़ॉल्ट मेटाक्लास है। आपके मामले में, mytype is type, यानी, वे एक ही वस्तु हैं।

यदि आपके एक तर्क, या तीन तर्कों का उपयोग का उपयोग आप एक वर्ग को गतिशील बना सकते हैं एक वस्तु के प्रकार की जाँच करने के type उपयोग कर सकते हैं ,:

myclass = type('ClassB', (object,), {"class_attribute": 3.14}) 

के एक पल कि mytype आप के रूप में काम के लिए मान लेते हैं सोचा था कि यह होगा। याद रखें कि एक प्रकार का एक उदाहरण एक वर्ग है, ठीक वैसे ही एक वर्ग का एक उदाहरण एक वस्तु है। तो, वैसे ही (सिंगलटन कक्षाओं को छोड़कर) ClassA() is not ClassA() (प्रत्येक उदाहरण अद्वितीय है), mytype() is not mytype() - यानी जब भी आप प्रकार को तुरंत चालू करते हैं तो आपको एक अलग वर्ग प्राप्त करना चाहिए। तो आपको वैसे भी ClassA वापस नहीं मिलेगा। कोड के साथ बिंदु को वर्णन करने के लिए आप चला सकते हैं:

>>> type('A', (object,), {}) == type('A', (object,), {}) 
False 

ओपी संपादित उत्तर:

अजगर में

वर्ग हैं "प्रथम श्रेणी नागरिकों", क्या आप सबसे संकलित भाषाओं में है के विपरीत है।इसका मतलब है कि आप कक्षा को सीधे पास कर सकते हैं; यदि आप एक typeof बराबर की जरूरत नहीं है:

>>> class A(object): pass 
... 
>>> B = A 
>>> B() 
<__main__.A object at 0xb781138c> 
>>> def print_class_name(cls): 
...  print cls.__name__ 
... 
>>> print_class_name(B) 
A 

This लेख कैसे type, object और वस्तु उदाहरणों अजगर में जुड़े हुए हैं का एक बहुत अच्छा विवरण शामिल हैं।

+0

धन्यवाद, अभी लेख पढ़ रहा है। –

3

क्या आलसी कहता है, type के साथ यह संभव नहीं है। हो सकता है कि क्या आप इस्तेमाल कर सकते हैं जैसे

class ClassA: pass 
myclass = ClassA 
instance = myclass() 
संबंधित मुद्दे