私は 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 を呼び出してそれが発生するかどうかをチェックすることによって実装されますが、これは私が望んでいることではありません。
ベストアンサー1
はい、getattr()
属性を取得し、callable()
それがメソッドであることを確認するために使用します。
invert_op = getattr(self, "invert_op", None)
if callable(invert_op):
invert_op(self.path.parent_op)
getattr()
通常、属性が存在しない場合には例外がスローされることに注意してください。ただし、デフォルト値 (None
この場合は ) を指定すると、代わりにその値が返されます。