Sto scrivendo un algoritmo di ricerca nello spazio di stato AI e ho una classe generica che può essere utilizzata per implementare rapidamente un algoritmo di ricerca. Una sottoclasse definirebbe le operazioni necessarie e l'algoritmo farà il resto.
Qui è dove rimango bloccato: voglio evitare di rigenerare lo stato principale più e più volte, quindi ho la seguente funzione, che restituisce le operazioni che possono essere legalmente applicate a qualsiasi stato:
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 la funzione invert_op viene generata per impostazione predefinita.
Esiste un modo più rapido per verificare se la funzione non è definita che rilevare un'eccezione?
Stavo pensando a qualcosa sulla falsariga di controllare il presente in dir, ma questo non sembra giusto. hasattr viene implementato chiamando getattr e verificando se genera, che non è quello che voglio.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').