Saya sedang menulis algoritme pencarian ruang keadaan AI, dan saya memiliki kelas generik yang dapat digunakan untuk mengimplementasikan algoritma pencarian dengan cepat. Subclass akan mendefinisikan operasi yang diperlukan, dan algoritma melakukan sisanya.
Di sinilah saya macet: Saya ingin menghindari regenerasi negara induk berulang-ulang, jadi saya memiliki fungsi berikut, yang mengembalikan operasi yang dapat diterapkan secara hukum ke keadaan apa pun:
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
Dan fungsi invert_op melempar secara default.
Apakah ada cara yang lebih cepat untuk memeriksa untuk melihat apakah fungsi tidak didefinisikan daripada menangkap pengecualian?
Saya sedang memikirkan sesuatu untuk memeriksa apakah ada dir, tapi itu sepertinya tidak benar. hasattr diimplementasikan dengan memanggil getattr dan memeriksa apakah itu memunculkan, yang bukan yang saya inginkan.
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').