私は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')。