Sto scrivendo un algoritmo di ricerca spaziale AI, e ho una classe generica che può essere utilizzata per implementare rapidamente un algoritmo di ricerca. Una sottoclasse definirà le operazioni necessarie e l'algoritmo farà il resto.Qual è il modo più veloce per verificare se una classe ha una funzione definita?
Qui è dove vengo bloccato: Voglio evitare rigenerare lo stato genitore più e più volte, in modo da avere la seguente funzione, che restituisce le operazioni che possono essere applicate legalmente 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 si attiva di default.
Esiste un modo più rapido per verificare se la funzione non è definita rispetto al rilevamento di un'eccezione?
Stavo pensando qualcosa sulla linea di controllo per presente in dir, ma quello non sembra giusto. hasattr è implementato chiamando getattr e controllando se si alza, che non è quello che voglio.
qualcosa suona rotto, ma io non riesco a mettere il dito su di esso ... –
* "hasattr è implementato chiamando getattr e controllando se si alza, che non è quello che voglio. "* Perché no? Perché ti importa cosa fa l'implementazione? – detly
'has_op = lambda obj, op: callable (getattr (obj, op, None))' – samplebias