def __eq__(self, other): # should be the same type if type(self) != type(other): return False # should have the same properties names = {} # used as set of property names, ignoring values for interface in providedBy(self): names.update(getFields(interface)) # order will be different always, don't compare it if 'order' in names: del names['order'] for name in names: if getattr(self, name) != getattr(other, name): return False return True
def to_dict(self): data = {} for interface in providedBy(self): for key in getFields(interface).keys(): data[key] = getattr(self, key) return data