में पाइथन nonlocal कथन मैं पाइथन 3 स्रोत कोड में दायरे के कुछ विश्लेषण करने की कोशिश कर रहा हूं और मैं कक्षा परिभाषा के अंदर nonlocal कथन कथन कैसे काम करता है के साथ अटक गया हूँ।कक्षा परिभाषा
जैसा कि मैं इसे समझता हूं, कक्षा परिभाषा अपने शरीर को एक नए नामस्थान के अंदर निष्पादित करती है (इसे कॉल करें) और कक्षा के नाम को प्रकार (नाम, आधार, dict) के परिणामस्वरूप बांधती है। Nonlocal एक्स तब तक काम करना चाहिए जब तक यह एक चर को संदर्भित करता है जो संलग्न गैर-स्थानीय दायरे में कहीं भी बंधे हैं।
इस से मैं संकलन और चलाने के लिए निम्न कोड की उम्मीद:
class A:
v = 1
class B:
nonlocal v
v = 2
लेकिन इस
SyntaxError: no binding for nonlocal 'v' found
के साथ विफल करते हुए निम्न कोड पूरी तरह से चलाता है
def A():
v = 1
class B:
nonlocal v
v = 2
किसी को भी व्याख्या कर सकते हैं फ़ंक्शन परिभाषा और कक्षा परिभाषा को बंद करने के बीच यहां अंतर?
अधिक शोध - अंतिम कोड नमूने में, स्थानीय में (स्थानीय)() में {v: 1} है, जबकि बी के अंदर यह है {v: 2, ''__module__'': '' __main__'', ''__locals__'': {...}} – Andyrooger