मैं एक AI राज्य अंतरिक्ष खोज एल्गोरिथ्म लिख रहा हूं, और मेरे पास एक सामान्य वर्ग है जिसका उपयोग खोज एल्गोरिथ्म को जल्दी से लागू करने के लिए किया जा सकता है। एक उपवर्ग आवश्यक संचालन को परिभाषित करेगा, और एल्गोरिथ्म बाकी काम करता है।
यहाँ मैं फंस गया हूं: मैं बार-बार मूल स्थिति को पुन: उत्पन्न करने से बचना चाहता हूं, इसलिए मेरे पास निम्नलिखित कार्य हैं, जो उन कार्यों को वापस करता है जो कानूनी रूप से किसी भी राज्य में लागू हो सकते हैं:
def get_operations(self, include_parent=True):
ops = self._get_operations()
if not include_parent and self.path.parent_op:
try:
parent_inverse = self.invert_op(self.path.parent_op)
ops.remove(parent_inverse)
except NotImplementedError:
pass
return ops
और invert_op फ़ंक्शन डिफ़ॉल्ट रूप से फेंकता है।
क्या यह देखने के लिए जांच करने का एक तेज़ तरीका है कि क्या फ़ंक्शन को अपवाद को पकड़ने की तुलना में परिभाषित नहीं किया गया है?
मैं dir में वर्तमान के लिए जाँच की तर्ज पर कुछ सोच रहा था, लेकिन यह सही नहीं लगता। hasattr को getattr पर कॉल करके लागू किया जाता है और अगर यह उठता है तो जाँच करता है कि मुझे क्या चाहिए।
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt')।