0

我有这个类和子类:

班级范围:

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

类 DNAFeature(范围):

   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 对象组中负整数,设置起始 ATG 密码子的起始位置 getTranslStart() - 返回一个整数,起始 ATG 密码子的起始位置 setTranslStop(i) - 接受正整数,设置终止密码子的结束位置 getTranslStop() -返回一个整数,终止密码子的结束位置 setDisplayId(s) – 设置基因模型的名称;s 是一个字符串 getDisplayId() – 返回基因模型的名称,返回一个字符串,例如,AT1G10555.1 当用户将不正确的类型和值传递给构造函数和“set”方法时,GeneModel 应该引发适当的 ValueError 和 TypeError 异常。</p>

我试图写下我想到的任何东西,阅读书籍以及寻找将代码组合在一起的方法,但我对编程非常陌生,几乎无法理解如何正确编写代码。老实说,这是我第一次上编程课。因此,如果我在代码中犯了任何有趣的错误,请原谅我。我还没有完成我的代码,并且仍在阅读书籍以了解我的代码在哪里做错和正确。但是,我真的需要你的帮助来引导我走上正确的道路。非常感谢你们。以下是我的代码:

类基因模型(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
4

2 回答 2

1

首先,稍微清理一下。我并不完全相信您的原始课程 DNAFeature 实际上是正确的。DNAFeature 似乎是从其他一些名为 Range 的类继承而来的,我们在这里缺少这些类,因此如果您有该代码,请也提供它。在该原始类中,您需要定义变量 SeqName (另外,最好将变量保持小写),否则 self.SeqName 将毫无意义。此外,除非它们是从 Range 类继承的,否则您还应该定义方法“setStart”和“setEnd”。你的 getter 不应该有任何额外的变量,所以请随意将其更改为“def getSeqName(self)”而不是添加“s”。我不确定您的代码还应该做什么,所以我会保留任何进一步的评论。

此外,尽管您在评论中另有说明,但我必须从命名约定(以及我从 bio 中记得的一点点)相信您实际上希望 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 类是正确的,以及您希望如何解决问题的模型(就您的类所做的而言),并在它更清晰时再次尝试询问。希望这可以帮助!

于 2010-10-17T17:54:48.083 回答
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

希望这可以帮助。

于 2010-10-17T19:07:36.863 回答