我有这样的Range类的代码:

class Range:
   def __init__(self, start, end):
      self.setStart(start)
      self.setEnd(end)
   def getStart(self):
      return self.start
   def setStart(self, s):
      self.start = s
   def getEnd(self):
      return self.end
   def setEnd(self, e):
      self.end = e
   def getLength(self):
      return len(range(self.start, self.end))
   def overlaps(self, r):
      if (r.getStart() < self.getEnd() and r.getEnd() >= self.getEnd()) or \
         (self.getStart() < r.getEnd() and self.getEnd() >= r.getEnd()) or \
         (self.getStart() >= r.getStart() and self.getEnd() <= r.getEnd()) or \
         (r.getStart() >= self.getStart() and r.getEnd() <= self.getEnd()):
          return True
      else:
          return False


我的任务是创建Range的子类,称为DNAFeature,它代表一个Range,它也具有链和序列名称:

实现setStrandgetStrand来设置和返回链信息,以及实现setSeqNamegetSeqName来设置或返回特征所属序列的名称。
如果某个特征位于负(反向)链上,则getStrand()应返回-1。如果特征在正链上,则getStrand()应返回1。如果未设置链,则getStrand()应返回0。

我试图写点东西,但对我来说看起来根本不对,大家可以帮我吗,非常感谢,这是我的代码:

class DNAFeature(Range):
    def __init__(self, strand, sequence):
            self.setStrand(strand)
            self.setSeqName(sequence)
    def getSeqName(self):
            return self.plus or minus
    def setSeqName(self, seq):
            self.sequence = seq
    def getStrand(self):
            if self.getSeqName(self.strand) == 'plus':
                    return 1
            if self.getSeqName(self.strand) == 'minus':
                    return -1
            else:
                    return 0
    def setStrand(self, strand):
            self.strand = strand

最佳答案

在最普通的情况下(不做任何假设),这似乎是您需要的:

class DNAFeature(Range):

    def __init__(self, start, end):
        self.setStart(start)
        self.setEnd(end)
        self.strand = None
        self.sequencename = None

    def setStrand(self, s):
        self.strand = s

    def getStrand(self):
        if self.sequenceName == 'plus':
            return 1
        elif self.sequenceName == 'minus':
            return -1
        else:
            return 0

    def setSequenceName(self, s):
        self.sequencename = s

    def getSequenceName(self, s):
        return self.sequenceName


您会注意到,在这里,我已经重新定义了init。有一个原因。我记得在您以前的一个问题中,您曾提到这是Java作业,只是重命名为python。在Java中,构造函数不会被继承(如果我做错了,请纠正我)。因此,如果使用相同的评分标准,则将因未在此处重新定义构造函数而丢失分数。

希望这可以帮助

10-05 18:51