Estoy escribiendo un algoritmo de búsqueda de espacio de estado AI, y tengo una clase genérica que se puede usar para implementar rápidamente un algoritmo de búsqueda. Una subclase definiría las operaciones necesarias, y el algoritmo hace el resto.
Aquí es donde me quedo atascado: quiero evitar la regeneración del estado padre una y otra vez, por lo que tengo la siguiente función, que devuelve las operaciones que se pueden aplicar legalmente a cualquier 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
Y la función invert_op arroja por defecto.
¿Hay alguna forma más rápida de verificar si la función no está definida que detectar una excepción?
Estaba pensando en algo en el sentido de verificar el presente en dir, pero eso no parece correcto. hasattr se implementa llamando a getattr y verificando si aumenta, que no es lo que quiero.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt')
.