Piszę algorytm wyszukiwania w przestrzeni stanów AI i mam klasę ogólną, której można użyć do szybkiego wdrożenia algorytmu wyszukiwania. Podklasa definiuje niezbędne operacje, a algorytm zajmie się resztą.
Tutaj utknąłem: chcę uniknąć ciągłego ponownego generowania stanu nadrzędnego, więc mam następującą funkcję, która zwraca operacje, które można legalnie zastosować do dowolnego stanu:
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
Funkcja invert_op generuje domyślnie.
Czy istnieje szybszy sposób sprawdzenia, czy funkcja nie jest zdefiniowana, niż przechwytywanie wyjątku?
Myślałem o czymś w rodzaju sprawdzania obecności w reż, ale to nie wydaje się właściwe. hasattr jest implementowany przez wywołanie getattr i sprawdzenie, czy podnosi, co nie jest tym, czego chcę.