Я думаю, что класс Detection был бы хорошей идеей с некоторой модификацией:
class Detection():
Instances = dict()
In_A = dict()
In_B = dict()
def __new__(cls,*args,**kwargs):
if filepath in Detection.Instances.keys():
_instance = Detection.Instances[filepath]
else:
_instance = super(Detection, cls).__new__(cls, *args, **kwargs)
return _instance
def __init__(self,filepath,coords,other,From_Algo):
if From_Algo = "A"
self.filepath = filepath
self.coords_A = coords
self.in_A = True
self.other_A = other
Detection.In_A[filepath] = self # Make sure that filepath is hashable
if From_Algo = "B"
self.filepath = filepath
self.coords_B = coords
self.in_B = True
self.other_B = other
Detection.In_B[filepath] = self # Make sure that filepath is hashable
Detection.Instances[filepath]=self # Make sure that filepath is hashable
@classmethod
def Check_coord_relation(cls,A_coords,B_coords):
...
# compare A_coords and B_coords
...
return Result
@classmethod
def Get_In_Both(cls):
cls._Get_In_Both = [Det in Det for cls.Instances.values() if (hasattr(Det,"In_A") and hasattr(Det,"In_B") and cls.Check_coord_relation(Det.coords_A,coords_B))]
@classmethod
def Get_Only_In_A(cls):
cls._Only_In_A = [Det in Det for cls.In_A.values() if Det not in cls._Get_In_Both]
@classmethod
def Get_Only_In_B(cls):
cls._Only_In_B = [Det in Det for cls.In_B.values() if Det not in cls._Get_In_Both]
@classmethod
def Calc_Interseciton(cls):
cls.Get_In_Both()
cls.Get_Only_In_A()
cls.Get_Only_In_B()
Вы можете использовать __new__, чтобы проверить, существует ли экземпляр, поэтому можно обновить различные атрибуты из алгоритмов, после этого класс может обработать все созданные экземпляры.
Сначала проверьте обнаружение в обоих алгоритмах, удалите их из форм A и B.
Я не смог попробовать это надеюсь, это поможет или даст вам новые идеи.
Переменные класса не обязательно должны быть словарями, но словари действительно быстрые.