J'écris un algorithme de recherche d'espace d'état AI, et j'ai une classe générique qui peut être utilisée pour implémenter rapidement un algorithme de recherche. Une sous-classe définirait les opérations nécessaires, et l'algorithme s'occupe du reste.
Voici où je suis bloqué: je veux éviter de régénérer l'état parent encore et encore, j'ai donc la fonction suivante, qui renvoie les opérations qui peuvent être légalement appliquées à n'importe quel état:
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
Et la fonction invert_op lance par défaut.
Existe-t-il un moyen plus rapide de vérifier si la fonction n'est pas définie que de détecter une exception?
Je pensais à quelque chose sur la vérification du présent dans dir, mais cela ne semble pas correct. hasattr est implémenté en appelant getattr et en vérifiant s'il déclenche, ce qui n'est pas ce que je veux.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').