-
Notifications
You must be signed in to change notification settings - Fork 0
Add rich comparison special methods (__ne__, __gt__, etc.) to a class
License
dgingrich/pycomparable
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
DISCLAIMER: Although this works (it really adds the rich comparison operators), it's for fun/learning purposes only. If you really need all the comparisons, you're probably better off writing __cmp__. I think Python3000 might automatically create __ne__ based on __eq__. The one real world use might be to easily add all rich comparison methods to a subclass where the parent class implements a subset of the operator. But how often does that happen? Just use it for fun. Try to add rich comparison methods (__eq__, __ne__, etc.) to an existing class. It exports three names: * comparable - class decorator * ComparableMetaclass - Metaclass to automatically call comparable * ComparableMixin - Mixin to automatically call comparable comparable works as a class decorator. It takes a class as an argument and returns a decorated class. comparable attempts to add the rich comparison special methods if they are not defined. If __eq__ is not defined, it will try to define it as being not != or not (< or >), etc. It then sets != as the inversion of ==. Finally it sets whatever inequalities are possible (e.g. < === <= and not ==). comparable will not overwrite existing methods. comparable won't add methods if there is not enough information. For example, if only __eq__ and __ne__ are defined, it will not attempt to add any inequalities. It also won't raise any errors, so be warned. ComparableMetaclass and ComparableMixin are additional ways to create a comparable class. Both are simply wrappers for the main comparable function. Inspired by this discussion turned rant on comp.lang.python (http://groups.google.com/group/comp.lang.python/browse_thread/thread/a5fa8ff0ffadd6ee/1aa3b5d25eae91d5) Loosely based on Ruby's comparable module (http://www.ruby-doc.org/core/classes/Comparable.html) though I believe the implementation is different.
About
Add rich comparison special methods (__ne__, __gt__, etc.) to a class
Resources
License
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published