-
-
Notifications
You must be signed in to change notification settings - Fork 93
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Fix __eq__ and __ne__ for classes implementing them
Main issue, which concerns Vector, Location, and ShapeList: Comparison with an object of a different type should not cause an exception - they are simply not equal. Raising an exception in __eq__ can (and will*) break unrelated code that expects __eq__ to be well-behaved. (* I noticed this bug when cq-editor choked on it while trying to find a name for an object in a dictionary of local variables) There's a second more minor issue, which concerns the rest of the classes: When the other type in __eq__ is not supported, one should technically return NotImplemented instead of False, to allow the other type to take part in the comparison, in case they know about our type. (__ne__ should also not generally be implemented as just the negation of __eq__ because of this, but that's also a moot point because the __ne__ can just be removed - Python will automatically do the right thing based on __eq__ here) Technically, the __eq__ for Vector and Plane is also broken in another way: It's not transitive. >>> a, b, c = Vector(0), Vector(9e-6), Vector(18e-6) >>> a == b == c True >>> a == c False They should really eg. have a separate is_close() for approximate comparison, but this isn't fixed here, since I have no idea how many places it'd break, for one.
- Loading branch information
Showing
3 changed files
with
80 additions
and
37 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters