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?
We can overload all existing operators but we can't create a new operator. To perform operator overloading, Python provides some special function or magic function that is automatically invoked when it is associated with that particular operator.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With