2009-09-22 13 views
21

Ben hasattr yerleşik işleve kaynak koduna bakarak ve benim ilgi kırılmak birkaç satır fark edildi:Python neden yanlış ve doğru bir referans sayımı tutuyor?

Py_INCREF(Py_False); 
return Py_False; 

... 

Py_INCREF(Py_True); 
return Py_True; 

Are değil Py_False ve Py_True küresel değerler? Sadece meraktan dolayı, Python neden bu değişkenler için referans sayımı tutuyor?

+0

-1: Bu, şu anda sahip olduğunuz herhangi bir programlama sorununu nasıl çözer? –

+9

@ S.Lott, burada soruların ne zamandan beri somut programlama problemleri ile ilgili olması gerektiğinden. – Triptych

+17

Şu anda Py_True ve Py_False üzerindeki referans sayımlarını artırma gereğini anlamadığım için sorun yaşıyorum. –

cevap

21

Tüm objelerin idaresi üniforma yapmak var. Bir işlevden bir dönüş değeri işleyen C kodu yazıyorsam, o nesnedeki referans sayısını artırmalı ve azaltmalıyım. Eğer işlev bana doğru döndürürse, referans sayımını değiştirip değiştirmeyeceğini bilmek için bu özel nesnelerden birinin olup olmadığını kontrol etmek zorunda kalmak istemiyorum. Tüm nesneleri aynı şekilde tedavi edebilirim. Diğer tüm nesneler aynı (btw ve Hiçbiri) Doğru ve Yanlış davranarak

, C kodu boyunca çok daha kolaydır.

+0

Ayrıca: T F ve Hiçbiri aslında nesnelerdir. Onların hiçbir yöntemi yok. http://docs.python.org/c-api/bool.html – Pod

+1

teknik olarak yöntemleri vardır. Her nesnenin yöntemleri vardır. – ironfroggy

+4

len (dir (Gerçek)), 54 - takoz * tam * yöntemidir. Onlar sadece tüm özel (çift alt çizgi isimleri) olanlar. –

İlgili konular