Я пишу алгоритм пошуку простору 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').