पर असाइन किया गया है, मैं उस ऑब्जेक्ट को निर्दिष्ट करने वाले नाम को निर्धारित करने के लिए कुछ कोड लिख रहा हूं। यह सामान्य डीबगिंग काम के लिए है और खुद को पाइथन आंतरिक के साथ परिचित करने के लिए है।किसी ऑब्जेक्ट को बनाए जाने वाले नाम को एक्सेस करना
मैंने इसे कक्षा सजावट के रूप में संरचित किया है ताकि उस वर्ग के सभी उदाहरणों को उनके नाम दर्ज किए जाएंगे यदि ऐसा करना संभव हो। कोड काफी लंबा है इसलिए मैं इसे तब तक पोस्ट नहीं करूंगा जब तक कि पूछा न जाए। सामान्य तकनीक के रूप में निम्नानुसार हालांकि
जो मैं चाहता
caller = inspect.currentframe().f_back
और खुलेinspect.getframeinfo(caller).filename
सेट औरast.parse
के लिए भेज करने के लिए कोड के साथ वर्ग '__init__
विधि को सजाने के लिए है। मुझे यहां कोई त्रुटि नहीं है क्योंकि (1) यह केवल डिबगिंग/प्रोफाइलिंग/हैकिंग (2) के लिए है, यह सटीक प्रक्रिया 'बस' पूर्ण हो गई थी या कोड नहीं चल रहा था। क्या इसमें कोई समस्या है?ast.Assignment
आवृत्ति का कारण बनता है वर्तमान में क्रियान्वित__init__
विधिचलाने के लिए
len(assignment.targets) == 1
तो बाएं हाथ की ओर केवल एक आइटम है अगर मिल जाए, और मैंtargets[0].id
से बाहर नाम मिल सकता है।a = Foo()
जैसे साधारण रूप में,assignment.value
ast.Call
का एक उदाहरण है। यदि यह एक शाब्दिक (उदा। सूची) है, तोvalue
वह सूची और जमानत होगी क्योंकि जिस वस्तु में मुझे रूचि है वह किसी नाम पर असाइन नहीं किया जा रहा है।
क्या पुष्टि करते हैं कि assignment.value.func
तथ्य उद्देश्य यह है कि मैं में दिलचस्पी रखता हूँ की type(obj).__call__
में है सबसे अच्छा तरीका है। मैं बहुत यकीन है कि मैं इसकी गारंटी रहा है कि यह "में वहाँ कहीं" कर रहा हूँ या कोड दौड़ भी नहीं होगा। मुझे बस शीर्ष स्तर पर होने की आवश्यकता है। करने के लिए स्पष्ट बात यह है कि यह चलें और सुनिश्चित करें कि इसमें कोई आंतरिक कॉल नहीं है। तब मुझे गारंटी है कि मेरे पास नाम है। (मेरा तर्क सही है, मुझे यकीन नहीं है कि इसकी धारणाएं हैं)। यह आदर्श नहीं है क्योंकि अगर मुझे Foo
में दिलचस्पी है, तो इससे मुझे a = Foo(Bar())
को टॉस करने का कारण बन सकता है क्योंकि मुझे नहीं पता कि यह a = Bar(Foo())
है या नहीं।
बेशक मैं सिर्फ assignment.value.func.id
जांच कर सकते हैं, लेकिन फिर किसी Foobar = Foo
या कुछ और कर सकता था तो मैं यह भी भारी
किसी भी मदद पर भरोसा करने की बहुत सराहना की जाएगी नहीं करना चाहती। हमेशा के रूप में, मुझे किसी भी अन्य सुझाव या समस्याओं में दिलचस्पी है जो मैं देख सकता हूं।
इसके अलावा, मैं वास्तव में हैरान हूं कि मुझे केवल 'पायथन-इंटर्नल्स' टैग का आविष्कार करना पड़ा।
+ कई - पायथन शांत है! – katrielalex