我正在寫一個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並檢查它是否引發來實現,這不是我想要的。
東西破碎的聲音,但我不能完全把我的手指上... – 2011-03-11 02:43:10
*「hasattr是通過調用getattr並檢查是否引發,這不是我想要的。「*爲什麼不呢?你爲什麼關心實現的功能? – detly 2011-03-11 03:30:55
'has_op = lambda obj,op:callable(getattr(obj,op,None))' – samplebias 2011-03-11 04:03:11