Tôi đang viết một thuật toán tìm kiếm không gian trạng thái AI và tôi có một lớp chung có thể được sử dụng để nhanh chóng thực hiện thuật toán tìm kiếm. Một lớp con sẽ xác định các hoạt động cần thiết và thuật toán thực hiện phần còn lại.
Đây là nơi tôi gặp khó khăn: Tôi muốn tránh tái tạo trạng thái cha mẹ nhiều lần, vì vậy tôi có chức năng sau, trả về các hoạt động có thể được áp dụng hợp pháp cho bất kỳ trạng thái nào:
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
Và hàm invert_op ném theo mặc định.
Có cách nào nhanh hơn để kiểm tra xem hàm không được xác định hơn là bắt ngoại lệ không?
Tôi đã suy nghĩ điều gì đó về các dòng kiểm tra để trình bày trong dir, nhưng điều đó có vẻ không đúng. hasattr được thực hiện bằng cách gọi getattr và kiểm tra nếu nó tăng, đó không phải là điều tôi muốn.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').