Я пишу алгоритм поиска пространства состояний 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 и проверки, если он поднимается, чего я не хочу.
Что-то звучит сломана, но я не могу достаточно положить палец на его ... –
* "hasattr является реализуется путем вызова getattr и проверки, если он поднимается, чего я не хочу ». * Почему бы и нет? Почему вас волнует, что делает реализация? – detly
'has_op = lambda obj, op: callable (getattr (obj, op, None))' – samplebias