小编典典

检查类是否定义了函数的最快方法是什么?

all

我正在编写一个 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 函数默认抛出。

有没有比捕获异常更快的方法来检查函数是否未定义?

我正在考虑检查目录中是否存在的东西,但这似乎不对。hasattr 是通过调用 getattr 并检查它是否引发来实现的,这不是我想要的。


阅读 122

收藏
2022-08-07

共1个答案

小编典典

getattr()的,用于获取属性,并callable()验证它是一种方法:

invert_op = getattr(self, "invert_op", None)
if callable(invert_op):
    invert_op(self.path.parent_op)

请注意,getattr()当属性不存在时通常会引发异常。但是,如果您指定默认值(None在本例中为 ,),它将改为返回该值。

2022-08-07