I don't understand why you extended __eq__ this way. Didn't we only compare self.name because they have to be unique anyway?  What should happen if we compare two fields that are the same other than their help string, for example?