Я пишу алгоритм поиска в пространстве состояний AI, и у меня есть общий класс, который можно использовать для быстрой реализации алгоритма поиска. Подкласс будет определять необходимые операции, а алгоритм сделает все остальное.
Вот где я застрял: я хочу избежать повторного создания родительского состояния снова и снова, поэтому у меня есть следующая функция, которая возвращает операции, которые могут быть законно применены к любому состоянию:
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
А функция invert_op по умолчанию выдает.
Есть ли более быстрый способ проверить, не определена ли функция, чем перехват исключения?
Я думал что-то вроде проверки наличия в каталоге, но это не кажется правильным. hasattr реализуется путем вызова getattr и проверки его повышения, чего я не хочу.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').