यदि हमारे पास x = type(a)
और x == y
है, तो क्या यह आवश्यक है कि x is y
?क्लासोबजेक्ट सिंगलेट्स हैं?
यहाँ प्रति एक है, लेकिन यह एक धोखा है:
>>> class BrokenEq(type):
... def __eq__(cls, other):
... return True
...
>>> class A(metaclass=BrokenEq):
... pass
...
>>> a = A()
>>> x = type(a)
>>> x == A, x is A
(True, True)
>>> x == BrokenEq, x is BrokenEq
(True, False)
और मैं इस तरह प्रति एक नहीं बना सका:
>>> A1 = type('A',(), {})
>>> A2 = type('A',(), {})
>>> a = A1()
>>> x = type(a)
>>> x == A1, x is A1
(True, True)
>>> x == A2, x is A2
(False, False)
मेरे सवाल का स्पष्ट करने के लिए - समानता अधिभावी के बिना ऑपरेटर कुछ पागल करने के लिए, क्या कक्षा के लिए दो अलग-अलग मेमोरी स्थानों पर मौजूद होना संभव है या क्या आयात प्रणाली इसे किसी भी तरह से रोकती है?
यदि हां, तो हम इस व्यवहार को कैसे प्रदर्शित कर सकते हैं - उदाहरण के लिए, reload या __import__
के साथ अजीब चीजें कर रहे हैं?
यदि नहीं, तो क्या यह भाषा या कहीं भी दस्तावेज की गारंटी है?
उपसंहार:
# thing.py
class A:
pass
अंत में, यह है कि क्या मेरे लिए वास्तविक व्यवहार स्पष्ट किया है (और यह Blckknght जवाब में दावा समर्थन है)
>>> import sys
>>> from thing import A
>>> a = A()
>>> isinstance(a, A), type(a) == A, type(a) is A
(True, True, True)
>>> del sys.modules['thing']
>>> from thing import A
>>> isinstance(a, A), type(a) == A, type(a) is A
(False, False, False)
इसलिए, भले ही कोड importlib.reload
का उपयोग कक्षा पहचान द्वारा टाइपिंग प्रकार को तोड़ सकता है, यह भी isinstance
तोड़ देगा।
दिलचस्प सवाल! मुझे लगता है कि उन्हें होना चाहिए, बस इसलिए कि किसी दिए गए प्रकार की वस्तु संभवतया केवल एक ही तरीके से बनाई जाएगी। क्या मैं ऐसा कुछ कह सकता हूं? अभी नहीं। –
चूंकि सब कुछ अजगर में एक वस्तु है, इसलिए कक्षाएं उनके मेटाक्लास के "बस" उदाहरण हैं - हमारे पास "समान" कक्षा के अन्य उदाहरण क्यों नहीं हो सकते? हालांकि, मैं एक ऐसा उदाहरण ढूंढने में असफल रहा हूं जहां कक्षा को आयात करना या अन्यथा कक्षा में नाम बाध्य करना एक ही वस्तु के लिए एक और संदर्भ नहीं मिलता है। – wim
शायद यह उन चीजों में से एक है जो किसी दिए गए कार्यान्वयन में सच होने के लिए होता है, लेकिन भाषा की कल्पना में संबोधित नहीं किया जाता है और इसकी गारंटी नहीं है। –