2011-03-21 11 views
9
>>> class foo(object): 
...  def test(s): 
...   pass 
... 
>>> a=foo() 
>>> a.test is a.test 
False 
>>> print a.test 
<bound method foo.test of <__main__.foo object at 0x1962b90>> 
>>> print a.test 
<bound method foo.test of <__main__.foo object at 0x1962b90>> 
>>> hash(a.test) 
28808 
>>> hash(a.test) 
28808 
>>> id(a.test) 
27940656 
>>> id(a.test) 
27940656 
>>> b = a.test 
>>> b is b 
True 
+0

मुझे खेद है, क्या? – Mat

उत्तर

7

वे रनटाइम पर बाध्य हैं; ऑब्जेक्ट पर विशेषता का उपयोग हर बार विधि को फिर से शुरू करता है। जब आप दोनों एक ही पंक्ति में डालते हैं तो वे अलग होते हैं कि दूसरी विधि बाध्य होने तक पहली विधि जारी नहीं की जाती है।

+8

अलग-अलग रखें, 'id' प्रत्येक बार समान लगता है क्योंकि पिछला उदाहरण परिणाम मुद्रित होने के तुरंत बाद gc'd है, और सीपीथॉन के उस विशेष संस्करण में मेमोरी प्रबंधन अगले ऑब्जेक्ट को उसी में रखने के लिए पर्याप्त अनुमानित होता है जगह। – delnan

+0

हाहा यह मेरे साथ कभी नहीं हुआ जीसी एक ही योजक पर इसे स्थानांतरित कर देगा। धन्यवाद यह सब समझ में आता है। –