ฉันกำลังเขียนอัลกอริทึมการค้นหาสถานะ 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 จะพ่นตามค่าเริ่มต้น
มีวิธีที่เร็วกว่าในการตรวจสอบเพื่อดูว่าฟังก์ชันไม่ได้กำหนดไว้มากกว่าการจับข้อยกเว้นหรือไม่?
ฉันกำลังคิดบางอย่างเกี่ยวกับการตรวจสอบของขวัญใน dir แต่ดูเหมือนจะไม่ถูกต้อง hasattr ถูกใช้งานโดยเรียก getattr และตรวจสอบว่ามันเพิ่มขึ้นหรือไม่ซึ่งไม่ใช่สิ่งที่ฉันต้องการ
has_op = lambda obj, op: callable(getattr(obj, op, None))
hasattr(connection, 'invert_opt').