दिलचस्प पोस्ट
यह जांच कैसे करें कि कोई गतिविधि किसी गतिविधि के लिए गतिविधि स्टैक में अंतिम है या नहीं? JSON में डी। क्या करता है? MATLAB ओओपी धीमा है या क्या मैं कुछ गलत कर रहा हूं? एक HTML पृष्ठ से पुनर्निर्देशित करें ब्राउज़र में वापस बटन क्लिक करें Matplotlib विभिन्न आकार subplots JQuery में XML क्रॉस-डोमेन पार्स कैसे करें? Laravel 5 – URL से सार्वजनिक निकालें जावा: नियंत्रण प्रवाह के रूप में अपवाद? मैं पायथन कोड कैसे सुरक्षित करूं? त्रिज्या और किनारों के आसपास के बिंदु के साथ एक चक्र बनाएं जावास्क्रिप्ट के साथ एक JSON ऑब्जेक्ट ट्री के सभी नोड्स को पार करें कैसे ककड़ी सुविधा फ़ाइल समानांतर को निष्पादित करें ढूँढें अगर स्ट्रिंग सी ++ में अन्य स्ट्रिंग के साथ समाप्त हो जाती है क्लोज़र में डिबगिंग?

ऑब्जेक्ट के तरीकों और विशेषताओं की पूरी सूची कैसे प्राप्त करें?

dir(re.compile(pattern)) 

सूचियों के तत्वों में से एक के रूप में पैटर्न वापस नहीं करता है अर्थात् यह देता है:

 ['__copy__', '__deepcopy__', 'findall', 'finditer', 'match', 'scanner', 'search', 'split', 'sub', 'subn'] 

मैनुअल के अनुसार, इसमें शामिल होना चाहिए

ऑब्जेक्ट के गुणों के नाम, उसके वर्ग के गुणों के नाम, और इसके कक्षा के आधार वर्गों के गुणों की पुनरावर्ती रूप से।

यह भी कहते हैं कि

यह सूची जरुरी नहीं है

क्या पूरी सूची प्राप्त करने का कोई तरीका है? मुझे हमेशा यह माना जाता है कि डियर पूरी सूची लौटता है लेकिन जाहिरा तौर पर यह नहीं …

इसके अलावा: क्या केवल गुणों को सूचीबद्ध करने का एक तरीका है? या केवल तरीकों?

संपादित करें: यह वास्तव में अजगर में एक बग है -> माना जाता है कि यह 3.0 शाखा (और शायद 2.6 में भी तय है)

वेब के समाधान से एकत्रित समाधान "ऑब्जेक्ट के तरीकों और विशेषताओं की पूरी सूची कैसे प्राप्त करें?"

विशेषताओं की पूरी सूची के लिए, संक्षिप्त उत्तर है: नहीं। समस्या ये है कि विशेषताएँ वास्तव में getattr निर्मित समारोह द्वारा स्वीकार किए गए तर्क के रूप में परिभाषित किए गए हैं। जैसे कि उपयोगकर्ता __getattr__ को फिर से क्रियान्वित कर सकता है, अचानक किसी भी तरह की विशेषता को अनुमति देता है, उस सूची को उत्पन्न करने के लिए कोई संभावित सामान्य तरीका नहीं है। dir फ़ंक्शन __dict__ विशेषता में चाबियाँ वापस देता है, यानी सभी गुणों को एक्सेस किया जा सकता है यदि __getattr__ पद्धति का __getattr__ क्रियान्वयन नहीं किया गया है।

दूसरे प्रश्न के लिए, यह वास्तव में समझ में नहीं आता है दरअसल, तरीके कॉलनीय गुण हैं, और कुछ नहीं। आप फिल्टर योग्य गुण फ़िल्टर कर सकते हैं, और, inspect मॉड्यूल inspect उपयोग वर्ग तरीकों, विधियों या कार्यों को निर्धारित करते हैं।

यही कारण है कि नया __dir__() विधि अजगर 2.6 में जोड़ा गया है

देख:

यहां पियरेबीडीआर और मो के उत्तर में व्यावहारिक अतिरिक्त है:

– पायथन = 2.6 = और नए-शैली के वर्गों के लिए , डीआईआर () पर्याप्त लगता है;
पुरानी-शैली वाले कक्षाओं के लिए , हम कम से कम एक ऐसा मानक मॉड्यूल कर सकते हैं जो टैब पूरा करने में सहायता करता है: dir() अलावा, __class__ को __class__ – और फिर इसके __bases__ लिए __bases__ :

 # code borrowed from the rlcompleter module # tested under Python 2.6 ( sys.version = '2.6.5 (r265:79063, Apr 16 2010, 13:09:56) \n[GCC 4.4.3]' ) # or: from rlcompleter import get_class_members def get_class_members(klass): ret = dir(klass) if hasattr(klass,'__bases__'): for base in klass.__bases__: ret = ret + get_class_members(base) return ret def uniq( seq ): """ the 'set()' way ( use dict when there's no set ) """ return list(set(seq)) def get_object_attrs( obj ): # code borrowed from the rlcompleter module ( see the code for Completer::attr_matches() ) ret = dir( obj ) ## if "__builtins__" in ret: ## ret.remove("__builtins__") if hasattr( obj, '__class__'): ret.append('__class__') ret.extend( get_class_members(obj.__class__) ) ret = uniq( ret ) return ret 

(परीक्षण कोड और आउटपुट को संक्षिप्तता के लिए हटा दिया जाता है, लेकिन मूल रूप से नए-स्टाइल ऑब्जेक्ट के लिए हमें get_object_attrs() लिए get_object_attrs() के समान परिणाम get_object_attrs() , और पुरानी-शैली वाले कक्षाओं के लिए dir() आउटपुट के मुख्य भाग को लगता है __class__ विशेषता होने के लिए))

इस तरह मैंने ऐसा किया, केवल साधारण कस्टम ऑब्जेक्ट्स के लिए उपयोगी होते हैं जिनके लिए आप गुण जोड़ते हैं: obj = type("CustomObj",(object,),{}) , या बस के साथ एक obj ऑब्जेक्ट बनाया गया है:

 class CustomObj(object): pass obj=CustomObject() 

फिर, केवल कस्टम विशेषताओं के साथ एक शब्दकोश प्राप्त करने के लिए, मुझे क्या करना है:

 {key: value for key, value in self.__dict__.items() if not key.startswith("__")}