【发布时间】:2011-07-13 05:01:08
【问题描述】:
我正在编写一个 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 并检查它是否引发来实现的,这不是我想要的。
【问题讨论】:
-
“hasattr 是通过调用 getattr 并检查它是否引发的来实现的,这不是我想要的。” 为什么不呢?你为什么关心实现的功能?
-
has_op = lambda obj, op: callable(getattr(obj, op, None)) -
试试:
hasattr(connection, 'invert_opt').
标签: python