2012-10-15 8 views
13

अजगर docs (yeah, I have this thing with the docs) यह कहा गया है कि में:पायथन - उपयोगकर्ता द्वारा परिभाषित कक्षाओं में डिफ़ॉल्ट रूप से __cmp __() और __hash __() विधियां हैं? या?

उपयोगकर्ता-परिभाषित वर्गों डिफ़ॉल्ट रूप से __cmp__() और __hash__() तरीकों है; उनके साथ, सभी वस्तुएं असमान की तुलना करती हैं (स्वयं को छोड़कर) और x.__hash__()id(x) लौटाती है।

लेकिन निम्नलिखित कोड एक और बात पता चलता है:

>>> class Test(object): pass 
... 
>>> t = Test() 
>>> 
>>> t.__hash__ 
<method-wrapper '__hash__' of Test object at 0x01F2B5D0> 
>>> 
>>> t.__cmp__ 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
AttributeError: 'Test' object has no attribute '__cmp__' 
>>> 

तो जहां __cmp__ है या मैं क्या याद आ रही है?

उत्तर

9

दस्तावेज़ीकरण थोड़ा भ्रामक है।

कोई __cmp__(), __eq__() या __ne__() आपरेशन परिभाषित किया गया है, तो वर्ग उदाहरणों वस्तु पहचान ("पता") द्वारा तुलना की जाती है: पूरी कहानी पाने के लिए आपको अर्थात् इस हिस्से __cmp__ पर पढ़ने के लिए,।

तो, मूल रूप से, आप नहीं डिफ़ॉल्ट रूप से एक __cmp__ विधि मिलता है, लेकिन उपयोगकर्ता परिभाषित वर्गों के उदाहरण अन्य वस्तुओं की तुलना में किया जा सकता है; अगर उदाहरण में __cmp__ विधि नहीं है, तो ऑब्जेक्ट पहचान (id(obj) द्वारा निर्धारित, जो आमतौर पर ऑब्जेक्ट का मेमोरी पता होता है) का उपयोग इसके बजाय किया जाएगा।

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