2012-05-14 14 views
12

मैं pdb का पता लगाने में वर्तमान में कर रहा हूँ इस बाहरपाइथन: क्यों इंस्टेंस वापस लौटा सकता है, जब इसे सही वापस करना चाहिए?

ipdb> isinstance(var, Type) 
False 
ipdb> type(var) 
<class 'module.Type'> 
ipdb> Type 
<class 'module.Type'> 

लगाने की ऐसा क्यों होता कर सकते हैं?

पी.एस. isinstance(var, type(var)) रिटर्न True

+5

कई प्रकार के प्रकार 'टाइप' (समय में विभिन्न बिंदुओं पर कहें) के रूप में जाना जा सकता है। क्या आप एक पूर्ण उदाहरण उत्पन्न कर सकते हैं जो समस्या का प्रदर्शन करता है? – NPE

+10

क्या आपके कोड में कोई 'आयात'/'रीलोड' जादू है? –

+0

@RomanBodnarchuk, मुझे ऐसा नहीं लगता है। क्या आप ऐसे जादू के उदाहरण प्रदान कर सकते हैं? – Shark

उत्तर

13
  1. मैं केवल अनुमान लगा सकते हैं के रूप में उम्मीद, लेकिन अगर आप module

    class Type(object): pass 
    var = Type() 
    class Type(object): pass 
    

    में क्या तो दोनों प्रकार <class 'module.Type'> की तरह लग रहे, लेकिन फिर भी अलग हैं।

    आप की जांच कर सकता है कि

    print(id(Type), id(var.__class__)) 
    

    के साथ या के साथ

    print(Type is var.__class__) 
    

    ध्यान दें कि इन तुलना दोनों old- के लिए काम करते हैं, और नई शैली कक्षाओं। नए शैली के वर्गों के लिए, वे print(Type is type(var)) के बराबर हैं। लेकिन यह पुराने शैली के वर्गों के मामले में नहीं है।

  2. एक और बहुत आम जाल है कि आप

    python -m module 
    

    या

    python module.py 
    

    बनाने यह __main__ मॉड्यूल के रूप में जाना जाता है के साथ इस मॉड्यूल कहते हैं। यदि इसे अपने सच्चे नाम के तहत कहीं और आयात किया जाता है, तो यह उस नाम के साथ-साथ एक अलग नाम स्थान के साथ भी जाना जाता है।

  3. एक और अनुमान यह हो सकता है कि आप ABCs के साथ काम कर रहे हैं या अन्यथा कक्षा को __instancecheck__() विधि है।

+0

मैंने अपनी सभी स्रोत फ़ाइलों में केवल एक ही प्रकार को परिभाषित किया है। और मैं छुपे हुए तरीकों से झुकाव नहीं कर रहा हूं। केवल '__str__',' __iter__', '__len__'। तो यह मामला नहीं है। साथ ही, यह वर्ग 'ऑब्जेक्ट 'का उप-वर्ग है। – Shark

+0

बीटीडब्ल्यू, मैं वर्तमान में पीडीबी सत्र में हूं। कारण निर्धारित करने के लिए मुझे क्या जांचना चाहिए? – Shark

+0

आप पुराने आईडी वर्गों के लिए 'आईडी (प्रकार (var))' टाइप, var (var) टाइप', आदि –

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^