2009-02-13 15 views
23

मैं पाइथन 2.x का उपयोग कर रहा हूं और मेरे पास एक ऑब्जेक्ट है जिसे मैं एथर से बुला रहा हूं; इस पर दस्तावेज विशेष रूप से स्पष्ट नहीं है। मैं उस वस्तु के लिए गुणों की सूची और प्रत्येक संपत्ति के प्रकार प्राप्त करने में सक्षम होना चाहता हूं।मैं पाइथन 2.x में ऑब्जेक्ट पर आत्मनिरीक्षण कैसे करूं?

इसी प्रकार, मैं उस ऑब्जेक्ट के लिए विधियों की एक सूची भी प्राप्त करना चाहता हूं, साथ ही साथ उस विधि पर कोई अन्य जानकारी भी प्राप्त कर सकता हूं, जैसे कि तर्कों और उनके संबंधित प्रकारों की संख्या।

मुझे एहसास है कि मुझे बस मेरी Google खोजों में सही शब्दकोष याद आ रही है। ऐसा नहीं है कि मैं विनिर्देशों से हटना चाहता हूं, लेकिन यह सक्रिय निर्देशिका है, इसलिए यह हमेशा मजेदार है।

उत्तर

24

अच्छा ... आपका पहला स्टॉप एक साधारण डीआईआर (ऑब्जेक्ट) होगा। यह आपको फ़ील्ड और विधियों दोनों ऑब्जेक्ट के सदस्यों को दिखाएगा। इसे एक इंटरैक्टिव पायथन शेल में आज़माएं, और थोड़ा सा खेलें।

उदाहरण के लिए:

> class Foo: 
    def __init__(self): 
    self.a = "bar" 
    self.b = 4711 

> a=Foo() 
> dir(a) 
['__doc__', '__init__', '__module__', 'a', 'b'] 
+0

मैंने डीआईआर की कोशिश की, लेकिन मुझे कुछ संपत्तियां नहीं मिलीं जो मुझे पता है। यह एक सक्रिय निर्देशिका ऑब्जेक्ट (ADSNameSpaces, GetObject) है, और मैं यह देखने की उम्मीद कर रहा था कि "स्न," "सीएन" जैसे विभिन्न गुण सूची में थे, लेकिन वे नहीं हैं। शायद मैंने इसके लिए गलत ऑब्जेक्ट चुना है। –

9

कैसे की तरह कुछ के बारे में:

निरीक्षण मॉड्यूल कई उपयोगी कार्यों प्रदान करता है:

>>> o=object() 
>>> [(a,type(o.__getattribute__(a))) for a in dir(o)] 
[('__class__', <type 'type'>), ('__delattr__', <type 'method-wrapper'>), 
('__doc__', <type 'str'>), ('__format__', <type 'builtin_function_or_method'>), 
('__getattribute__', <type 'method-wrapper'>), ('__hash__', <type 'method-wrapper'>), 
('__init__', <type 'method-wrapper'>), 
('__new__', <type 'builtin_function_or_method'>), 
('__reduce__', <type 'builtin_function_or_method'>), 
('__reduce_ex__', <type 'builtin_function_or_method'>), 
('__repr__', <type 'method-wrapper'>), ('__setattr__', <type 'method-wrapper'>), 
('__sizeof__', <type 'builtin_function_or_method'>), 
('__str__', <type 'method-wrapper'>), 
('__subclasshook__', <type 'builtin_function_or_method'>)] 
>>> 

एक अधिक संरचित विधि का उपयोग करने inspect module हो जाएगा मॉड्यूल, कक्षाएं, विधियों, कार्यों, ट्रेसबैक, फ्रेम objec जैसे लाइव ऑब्जेक्ट्स के बारे में जानकारी प्राप्त करने में मदद के लिए टीएस, और कोड ऑब्जेक्ट्स। उदाहरण के लिए, यह आपको किसी वर्ग की सामग्री की जांच करने, किसी विधि के स्रोत कोड को पुनर्प्राप्त करने, फ़ंक्शन के लिए तर्क सूची निकालने और प्रारूपित करने में सहायता कर सकता है, या एक विस्तृत ट्रेसबैक प्रदर्शित करने के लिए आवश्यक सभी जानकारी प्राप्त कर सकता है।

+0

यह getattribute सामान के संबंध में बल्कि बदसूरत है। Getattr() अंतर्निहित का उपयोग करना बेहतर है। –

+1

प्राप्त करने के लिए स्वतंत्र महसूस करें o .__ getattribute __ (ए) getattr (ओ, ए) – gimel

5

"Guide to Python introspection" शुरू करने के लिए एक अच्छा लेख है।

+0

के साथ एक बहुत गहरा लेख नहीं है। – AdamC

3

आप inspect module पर एक नज़र डाल सकते हैं। यह लाइव ऑब्जेक्ट्स के साथ-साथ स्रोत कोड के निरीक्षण के लिए विभिन्न प्रकार के टूल प्रदान करता है।

0

यदि आप Win32com.client.Dispatch का उपयोग कर रहे हैं, तो पाइथन ऑब्जेक्ट का निरीक्षण करना बहुत मदद नहीं हो सकता है क्योंकि यह IDISpatch के लिए एक सामान्य रैपर है।

आप टाइप लाइब्रेरी से पाइथन रैपर उत्पन्न करने के लिए makepy (जो Activestate Python के साथ आता है) का उपयोग कर सकते हैं। फिर आप रैपर के लिए कोड देख सकते हैं।

संबंधित मुद्दे