【问题标题】:python overloading operatorspython重载运算符
【发布时间】:2013-03-05 21:20:35
【问题描述】:

我需要实现一个 DNA 类,它具有一个序列,该序列由字母表中的一串字符('A,C,G,T')组成,我需要重载一些运算符,例如小于、大于、等等。

这是我的代码:

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)

问题:

当我 print(dna_1&gt;dna_2) 它返回 False 而不是 True... 为什么?

【问题讨论】:

  • 您的某些表达式使用len,而其他表达式则没有。这是故意的吗?
  • 不应该使用 len..我应该删除它对不起
  • 字符串的比较是按字母表的。 G 在 C 之后,所以返回 False。

标签: python operator-overloading string-length


【解决方案1】:

您可能想比较seqs:

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

etc.

不是self 的seq 和other,self 的seq 和other 的seq。

other 这是另一个 DNA。

如果需要比较长度:

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

etc.

【讨论】:

  • 看看__ge__、__ne__和__eq__,我认为OP想比较seq的len
  • ge,ne等的目的是用来比较dna_1和dna_2的长度
  • 你不是刚刚发布了应该删除len 吗?
  • 不管怎样,要不要len,看seq两边比较就行了。
  • 您收到错误消息,因为您在 other 上使用了 len。使用len(other.seq)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多