मैं इस तथ्य के आधार पर एक तर्क पर एक ऑपरेशन करना चाहता हूं कि यह एक नक्शा जैसी वस्तु या अनुक्रम जैसी वस्तु हो सकती है। मैं समझता हूं कि टाइप-जैसी जांच के लिए कोई रणनीति 100% विश्वसनीय नहीं होगी, लेकिन मैं एक मजबूत समाधान की तलाश में हूं।अनुक्रम और मैपिंग के बीच अंतर कैसे करें
इस answer के आधार पर, मुझे पता है कि यह निर्धारित करने के लिए कि कोई अनुक्रम है या नहीं और यह जांचने के बाद मैं यह जांच कर सकता हूं कि ऑब्जेक्ट मानचित्र है या नहीं।
def ismap(arg):
# How to implement this?
def isseq(arg):
return hasattr(arg,"__iter__")
def operation(arg):
if ismap(arg):
# Do something with a dict-like object
elif isseq(arg):
# Do something with a sequence-like object
else:
# Do something else
क्योंकि एक दृश्य एक नक्शा जहां कुंजी पूर्णांक हैं के रूप में देखा जा सकता है, मैं सिर्फ एक महत्वपूर्ण यह है कि एक पूर्णांक नहीं है खोजने की कोशिश करनी चाहिए? या शायद मैं स्ट्रिंग प्रतिनिधित्व देख सकता था? या ...?
अद्यतन
मैं SilentGhost के जवाब का चयन किया है, क्योंकि यह की तरह लग रहा सबसे "सही" एक है, लेकिन मेरी जरूरतों के लिए, यहाँ समाधान कार्यान्वयन के लिए मैं समाप्त हो गया है:
if hasattr(arg, 'keys') and hasattr(arg, '__getitem__'):
# Do something with a map
elif hasattr(arg, '__iter__'):
# Do something with a sequence/iterable
else:
# Do something else
अनिवार्य रूप से, मैं एबीसी पर भरोसा नहीं करना चाहते हैं क्योंकि कई कस्टम वर्ग हैं जो अनुक्रमों और शब्दकोशों की तरह व्यवहार करते हैं लेकिन फिर भी यह अजगर संग्रह एबीसी (@Manoj टिप्पणी देखें) का विस्तार नहीं करते हैं। मैंने सोचा कि चाबियाँ विशेषता (किसी व्यक्ति द्वारा उसका जवाब हटा दिया गया है) मैपिंग के लिए पर्याप्त पर्याप्त जांच थी।
अनुक्रम और मैपिंग एबीसी का विस्तार करने वाले वर्ग इस समाधान के साथ भी काम करेंगे।
क्यों नहीं बस की तरह कुछ अनुक्रम की कोशिश या तरह के नक्शे, और त्रुटियों के आधार पर, आप यह निर्धारित कर सकते हैं के रूप में यह इलाज के लिए क्या। – PyRulez