我有这个类和子类:
类范围:
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
class DNAFeature(Range):
def __init__(self, start, end): self.setStart(start) self.setEnd(end) self.strand = none self.sequencename = none def getSeqName(self, s): return self.SeqName def setSeqName(self, s): self.sequencename = s def getStrand(self): if self.SeqName == 'plus': return 1 elif self.SeqName == 'minus': return -1 else: return 0 def setStrand(self, s): self.strand = s
以下是我必须做的事情: 创建一个新类GeneModel-包含一组代表外显子的DNAFeature对象,并且是DNAFeature的子类。它应该实现以下方法: getFeats() - 返回DNAFeature对象列表,按起始位置排序 addFeat(feat) - 接受DNAFeature专长并将其添加到其内部的DNAFeature对象组中 setTranslStart(i) - 接受非负int,设置启动ATG密码子的起始位置 getTranslStart() - 返回一个int,它是启动ATG密码子的起始位置 setTranslStop(i) - 接受一个正int,设置终止密码子的结束位置 getTranslStop() - 返回一个int,终止密码子的结束位置 setDisplayId(s) - 设置基因模型的名称; s是一个字符串 getDisplayId() - 返回基因模型的名称,返回一个字符串,例如,AT1G10555.1当用户将错误的类型和值传递给构造函数和“set”方法时,GeneModel应引发适当的ValueError和TypeError异常。
我试图写下我想到的任何内容,阅读书籍以及搜索将代码放在一起的方式,但我对编程很新,很难理解如何正确编写代码。说实话,这是我第一次参加编程课程。因此,如果我在代码中犯了任何有趣的错误,请原谅我。我还没有完成我的代码,仍然在阅读书籍,看看我做错了什么,我的代码是正确的。但是,我真的需要你的帮助来引导我走上正确的道路。非常感谢你们。以下是我的代码:
类GeneModel(DNAFeature):
def __init__(self, translstart, translend, displayid): self.setTranslStart(translstart) self.setTranslStop(translend) setDisplayId(displayid) def getFeats(): result = [] sort.self.getStart() return result def addFeat(feat): self.addFeat = feat return self.getStart+self.getEnd def setTranslStart(i): self.translstart = self.setStart self.translstart = non-negative int def getTranslStart(): return self.translstart def setTranslStop(i): self.translend = self.setEnd self.translend = "+" int def getTranslStop(): return self.translend def setDisplayId(s): self.displayid = re.compile('r'\AT1G[0-9]{5,5}\.[0-9]{,1}, IGNORECASE') def getDisplayId(): return self.displayid
答案 0 :(得分:1)
首先,进行一点清理。我并不完全相信你的原始类DNAFeature实际上是正确的。 DNAFeature似乎继承自其他一些名为Range的类,我们在这里缺少所以如果你有这个代码,请提供它。在那个原始类中,你需要定义变量SeqName(同样,它最好保持变量低级),否则self.SeqName将毫无意义。另外,除非它们是从Range类继承的,否则还应该定义方法“setStart”和“setEnd”。你不应该得到任何额外的变量,所以可以随意将其改为“def getSeqName(self)”而不是添加“s”。我不确定你的代码到底应该做什么,所以我会进一步发表评论。
此外,尽管您在评论中另有说明,但我必须相信命名约定(以及我记得很少生物),您实际上希望GeneModel成为一组DNAFeature实例的容器。这与GeneModel子类化DNAFeature不同。如果我是对的,那么你可以试试:
class GeneModel(object):
def __init__(dnafeatures):
self.dnafeatures = dnafeatures
def get_features(self):
return self.dnafeatures
def add_feature(self, feature):
self.dnafeatures.append(feature)
这里 dnafeatures 只是一个dnafeature实例列表。这样就可以编写方法来访问这些功能,并做任何有趣的事情。
我的建议是确保你的DNAFeature课程是正确的,你的模型如何解决你的问题(根据你的课程做什么),并在它更清楚的时候再试一次。希望这有帮助!
答案 1 :(得分:1)
我不明白基因模型的名称是什么。我认为这是具体的主题,但我认为这对你有用:
class GenoModel(DNAFeature):
def __init__(self, start, end):
self.setStart(start)
self.setEnd(end)
self.strand = None
self.sequencename = None
self.exons = []
self.translStart = None
self.translStop = None
self.displayId = None
def getFeats(self):
self.exons.sort(cmp=self.start)
return self.exons
def addFeat(self, f):
if type(f) == DNAFeature:
self.exons.append(f)
else:
raise TypeError("Cannot add feature as it is not of type DNAFeature")
def setTranslStart(self, i):
if type(i) != int:
raise TypeError("Cannot set translStart as it is not of type int")
elif i < 0:
raise ValueError("Cannot set tanslStart to a negative int")
else:
self.translStart = i
def getTranslStart(self):
return self.translStart
def setTranslStop(self, i):
if type(i) != int:
raise TypeError("Cannot set translStop as it is not of type int")
elif i <= 0:
raise ValueError("Cannot set tanslStop to anything less than 1")
else:
self.translStop = i
def getTranslStop(self):
return self.translStop
def setDisplayId(self, s):
if type(s) != str:
raise TypeError("Cannot set desiplayId as it is not of type string")
else:
self.displayId = s
def getDisplayId(self):
return self.displayId
希望这有帮助。