2012-08-09 9 views
5

मुझे अक्सर यह जांचने की आवश्यकता है कि किसी वर्ग के एक उदाहरण में संपत्ति है और यदि वह संपत्ति मौजूद है, तो इसके मूल्य के साथ तुलना करें। क्या इसके अलावा इसे करने का कोई तरीका नहीं है?अस्तित्व की जांच करना और यदि मौजूद है, तो एक निश्चित मान

if house.garage: 
    if house.garage == '3 car': 
     # do something with house.garage 

उत्तर

5

आप के रूप में मार्टिन Fowler यहाँ द्वारा उल्लिखित "सशर्त अभिव्यक्ति को मजबूत" कर सकते हैं: अंदर यह वास्तव में है http://sourcemaking.com/refactoring/consolidate-conditional-expression#permalink-15

अनिवार्य रूप से, यदि कोई हो बयान एक और अगर बयान जिसमें सिर्फ 1 अगर एक साथ और बीच में बयान!

if house.garage: 
    if house.garage == '3 car': 
     # do something with house.garage 

डॉट नोटेशन उपयोग करने के बजाय

if house.garage and house.garage == '3 car': 
    # do something with house.garage 
6

हो जाता है, तो आप getattr के लिए एक कॉल, जिसका कोई डिफ़ॉल्ट मान लौट सकते हैं कर सकते हैं, तो नामित विशेषता मौजूद नहीं है:

if getattr(house, 'garage', "") == '3 car': 
    # proceed 

यदि house में 'गेराज' नामक कोई विशेषता नहीं है, getattr को केवल उस चीज़ का मूल्यांकन करने की आवश्यकता है जो '3 कार' के बराबर नहीं है।

+2

लोग "विशेषता मौजूद नहीं है" और "विशेषता का झूठा मूल्य" के बीच भेद नहीं कर रहे हैं, जो बहुत महत्वपूर्ण है क्योंकि अन्य दो उत्तरों अपवाद उठाएंगे यदि 'house.garage' वास्तव में मौजूद नहीं है बस कोई नहीं होने का विरोध किया। – Jake

+0

यह एक अच्छा जवाब है, लेकिन दूसरा मामला मेरे लिए अधिक आम है। मैं आमतौर पर एक django मॉडल में विदेशी कुंजी की जांच कर रहा हूँ। तो विशेषता हमेशा मौजूद है (डॉटेबल है) लेकिन कभी-कभी यह कोई नहीं है और अगर मैं संबंधित मॉडल विशेषताओं में से किसी एक को एक्सेस करने का प्रयास करता हूं तो त्रुटि होगी। – freb

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