Elegant compare
Chris Angelico
rosuav at gmail.com
Sat Aug 10 23:45:44 EDT 2013
On Sun, Aug 11, 2013 at 4:41 AM, Jason Friedman <jsf80238 at gmail.com> wrote:
> class my_class:
> def __init__(self, attr1, attr2):
> self.attr1 = attr1 #string
> self.attr2 = attr2 #string
> def __lt__(self, other):
> if self.attr1 < other.attr1:
> return True
> else:
> return self.attr2 < other.attr2
>
> I will run into problems if attr1 or attr2 is None, and they
> legitimately can be.
>
> I know I can check for attr1 or attr2 or both being None and react
> accordingly, but my real class has ten attributes and that approach
> will be long. What are my alternatives?
The first question is: What should the comparison do with a None
value? Should it be considered less than every string? If so, you
could simply use:
if (self.attr1 or "") < (other.attr1 or ""):
which will treat any falsy value as blank.
ChrisA
More information about the Python-list
mailing list