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 hará el resto.¿Cuál es la manera más rápida de verificar si una clase tiene una función definida?
Aquí es donde se queda bloqueado: Quiero evitar regenerar el estado de los padres una y otra vez, así 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 una manera más rápida de verificar si la función no está definida que capturar una excepción?
Estaba pensando algo en las líneas de comprobar el presente en dir, pero eso no parece correcto. hasattr se implementa llamando a getattr y comprobando si aumenta, que no es lo que quiero.
Algo suena rota, pero no puedo poner mi dedo en la llaga ... –
* "es hasattr implementado llamando a getattr y comprobando si aumenta, que no es lo que quiero. "* ¿Por qué no? ¿Por qué te importa lo que hace la implementación? – detly
'has_op = lambda obj, op: callable (getattr (obj, op, None))' – samplebias