Estou escrevendo um algoritmo de pesquisa de espaço de estado da IA e tenho uma classe genérica que pode ser usada para implementar rapidamente um algoritmo de pesquisa. Uma subclasse definiria as operações necessárias e o algoritmo fará o resto.
Aqui é onde eu fico preso: Eu quero evitar a regeneração do estado pai repetidamente, para que eu tenha a seguinte função, que retorna as operações que podem ser aplicadas legalmente em qualquer estado:
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
E a função invert_op lança por padrão.
Existe uma maneira mais rápida de verificar se a função não está definida do que capturar uma exceção?
Eu estava pensando em algo nas linhas de verificação do presente no dir, mas isso não parece certo. O hasattr é implementado chamando getattr e verificando se aumenta, o que não é o que eu quero.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt')
.