पर क्लोजर मैं हाल ही में संकलन के दौरान कक्षा के लिए symbol table entry को देखकर, सीपीथन स्रोत कोड के माध्यम से कदम उठा रहा था।__class__
मैं typedef struct _symtable_entry
संरचना के लिए निम्नलिखित प्रविष्टि टकरा:
[-- other entries --]
unsigned ste_needs_class_closure : 1; /* for class scopes, true if a
closure over __class__
should be created */
[-- other entries --]
मैं वास्तव में यह समझ नहीं कर पा रहे और अजगर कोड है कि वास्तव में सेट ste_needs_class_closure == 1
का एक उदाहरण नहीं मिल सकता है।
class foo:
y = 30
def __init__(self):
self.x = 50
def foobar(self):
def barfoo():
print(self.x)
print(y)
return barfoo
लेकिन फिर भी वह निष्पादित निष्पादन के दौरान ste_needs_class_closure
का मूल्य 0
और नहीं 1
के रूप में मैं आशा व्यक्त की यह होगा है: अन्य असफल प्रयासों के अलावा, मैं निम्नलिखित की कोशिश की है।
फ़ंक्शन जो वास्तव में इस मान को बदलता है drop_class_free
है जो अधिक मदद नहीं करता है। दुर्भाग्यवश, इसमें कोई टिप्पणी नहीं है।
यह वास्तव में की एक टिप्पणी के साथ analyze_block
में प्रयोग किया जाता है:
/* Check if any local variables must be converted to cell variables */
कौन सा मैं एक अवधारणा के रूप में समझ सकते हैं लेकिन एक उदाहरण है जहां ऐसा होता नहीं मिल रहा।
मैंने the changelog for Python 3.4 खोज करने का प्रयास किया है, संस्करण जिसमें यह सदस्य पहले दिखाई दिया था, लेकिन इसका कोई संदर्भ नहीं मिला।
तो, क्या कोई यह बता सकता है कि __class__ पर बंद होने का क्या अर्थ है, जब कक्षा के स्थानीय चर सेल चर में परिवर्तित हो जाते हैं? आदर्श रूप में, एक उदाहरण जो निष्पादन के दौरान वास्तव में इस व्यवहार को दृश्यमान बनाता है वह अद्भुत होगा।