子类/子类

时间:2010-10-17 17:22:35

标签: python bioinformatics

我有这个类和子类:

  

类范围:

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

2 个答案:

答案 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

希望这有帮助。