我有这样的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,它也具有链和序列名称:
实现
setStrand
和getStrand
来设置和返回链信息,以及实现setSeqName
和getSeqName
来设置或返回特征所属序列的名称。如果某个特征位于负(反向)链上,则
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中,构造函数不会被继承(如果我做错了,请纠正我)。因此,如果使用相同的评分标准,则将因未在此处重新定义构造函数而丢失分数。
希望这可以帮助