2015-02-24 8 views
6

मैं अभी एक फ़ंक्शन लिखने की कोशिश कर रहा हूं, और इसका उद्देश्य किसी ऑब्जेक्ट के __dict__ से गुजरना है और आइटम को फ़ंक्शन नहीं होने पर किसी आइटम को एक शब्दकोश में जोड़ना है।यदि कोई फ़ंक्शन नहीं है तो सूची में आइटम जोड़ना

def dict_into_list(self): 
    result = {} 
    for each_key,each_item in self.__dict__.items(): 
     if inspect.isfunction(each_key): 
      continue 
     else: 
      result[each_key] = each_item 
    return result 

अगर मैं गलत नहीं हूँ, inspect.isfunction कार्यों के रूप में lambdas पहचान करने के लिए और साथ ही, सही माना जाता है: यहाँ मेरी कोड है? हालांकि, अगर मैं

c = some_object(3) 
c.whatever = lambda x : x*3 

तो मेरे फ़ंक्शन में अभी भी लैम्ब्डा शामिल है। क्या कोई यह समझा सकता है कि यह क्यों है?

उदाहरण के लिए, अगर मैं इस तरह एक वर्ग है:

class WhateverObject: 
    def __init__(self,value): 
     self._value = value 
    def blahblah(self): 
     print('hello') 
a = WhateverObject(5) 

तो अगर मैं print(a.__dict__) कहते हैं, इसे वापस {_value:5}

+0

क्या आप समस्या का प्रदर्शन करने वाले स्वयं निहित उदाहरण दिखा सकते हैं? – BrenBarn

+0

@ टायलर फ़ंक्शन का मतलब है, आप क्या उम्मीद करते हैं? जो आपके मामले में काम नहीं कर रहे हैं? – Nilesh

उत्तर

4

आप वास्तव में जाँच कर रहे हैं देना चाहिए अगर each_key एक समारोह है, जो सबसे अधिक संभावना है नहीं है। आप वास्तव में, इस तरह

if inspect.isfunction(each_item): 

आप इस बात की पुष्टि कर सकते हैं, इस

def dict_into_list(self): 
    result = {} 
    for each_key, each_item in self.__dict__.items(): 
     print(type(each_key), type(each_item)) 
     if inspect.isfunction(each_item) == False: 
      result[each_key] = each_item 
    return result 

भी तरह एक print सहित, द्वारा, मान की जाँच करने के लिए है तो आप इस

की तरह, शब्दकोश समझ के साथ अपने कोड लिख सकते हैं
def dict_into_list(self): 
    return {key: value for key, value in self.__dict__.items() 
      if not inspect.isfunction(value)} 
+0

हां, आपका कार्य सही है। हालांकि, आप कैसे जानते थे कि प्रत्येक कुंजी सबसे अधिक संभावना नहीं है? – Tyler

+0

@ टाइयलर __dict__' में स्ट्रिंग कुंजियां होंगी और मान संबंधित वस्तुएं हैं। – thefourtheye

0

मैं dir के माध्यम से एक वस्तु की चर और inspect मॉड्यूल के बजाय अजगर की प्रतिदेय तरीकों को खोजने के लिए एक आसान तरीका के बारे में सोच सकते हैं।

{var:self.var for var in dir(self) if not callable(getattr(self, var))} 

कृपया ध्यान दें यह वास्तव में मानता है कि यह है कि आप overrided नहीं किया वर्ग के __getattr__ विधि विशेषताओं को प्राप्त करने के अलावा अन्य कुछ करने के लिए।

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