python overloading operators

operator-overloading, python, string-length

Solution

You probably want to compare `seq`s:

def __lt__(self, other):
    return self.seq < other.seq

etc.

Not `self`'s `seq` with `other`, `self`'s `seq` with `other`'s `seq`.

`other` here is another DNA.

If you need to compare lengths:

def __lt__(self, other):
    return len(self.seq) < len(other.seq)

etc.

Problem

I need to implement a DNA class which has attribute a sequence which consists of a string of characters from the alphabet ('A,C,G,T') and I need to overload some operators like less than, greater than, etc.. here is my code: ``` class DNA: def __init__(self, sequence): self.seq = sequence def __lt__(self, other): return (self.seq < other) def __le__(self, other): return(self.seq <= other) def __gt__(self, other): return(self.seq > other) def __ge__(self, other): return(len(self.seq) >= len(other)) def __eq__(self, other): return (len(self.seq) == len(other)) def __ne__(self, other): return not(self.__eq__(self, other)) ``` ``` dna_1=DNA('ACCGT') dna_2=DNA('AGT') print(dna_1 > dna_2) ``` Problem: when I `print(dna_1>dna_2)` it returns `False` instead of `True`... Why?

Original source