Kısa bir süre önce, derleme sırasında bir sınıf için symbol table entry'u görüntüleyerek CPython kaynak koduna adım atıyordum.__class__ üzerindeki kapanışlar
Ben typedef struct _symtable_entry
yapı için aşağıdaki girişi çarptı:
[-- other entries --]
unsigned ste_needs_class_closure : 1; /* for class scopes, true if a
closure over __class__
should be created */
[-- other entries --]
Gerçekten bunu anlamak gibi olamaz ve aslında ste_needs_class_closure == 1
ayarlayan piton kodu örneği bulamıyor.
class foo:
y = 30
def __init__(self):
self.x = 50
def foobar(self):
def barfoo():
print(self.x)
print(y)
return barfoo
bunun olacağını ümit Ama yürütür bile, yürütme sırasında ste_needs_class_closure
değeri 0
olup 1
: bir başka başarısız girişimden arasında, aşağıdaki çalıştılar.
Bu değeri gerçekten değiştiren işlev, çok fazla yardımcı olmayan drop_class_free
şeklindedir. Ne yazık ki, bunu iltifat eden hiç bir yorumu yok.
Aslında bir yorum ile analyze_block
kullanılır:
/* Check if any local variables must be converted to cell variables */
Bir kavram olarak anlayabiliyorum ama olur bir örnek bulamıyorum hangi.
the changelog for Python 3.4 numaralı telefonu aramayı denedim, bu üyenin ilk göründüğü sürümde ancak başvuru bulunamadı.
Yani, herkes bir sınıfın yerel değişkenleri hücre değişkenlerine dönüştürülürken, __class__ üzerinden kapanışının ne anlama geldiğini açıklayabilir mi? İdeal olarak, bu davranışı gerçekten yürütme sırasında görünür yapan bir örnek harika olur.