Ich schreibe einen AI-Zustandsraumsuchalgorithmus und habe eine generische Klasse, mit der ein Suchalgorithmus schnell implementiert werden kann. Eine Unterklasse würde die notwendigen Operationen definieren, und der Algorithmus erledigt den Rest.
Hier stecke ich fest: Ich möchte vermeiden, den übergeordneten Status immer wieder neu zu generieren, daher habe ich die folgende Funktion, die die Operationen zurückgibt, die legal auf jeden Status angewendet werden können:
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
Und die Funktion invert_op wird standardmäßig ausgelöst.
Gibt es eine schnellere Möglichkeit, um zu überprüfen, ob die Funktion nicht definiert ist, als eine Ausnahme abzufangen?
Ich habe etwas überlegt, ob ich in dir nach der Gegenwart suchen soll, aber das scheint nicht richtig zu sein. hasattr wird implementiert, indem getattr aufgerufen und überprüft wird, ob es ausgelöst wird, was ich nicht möchte.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').