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