子类/子类

2024-10-02 18:27:34 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个类和子类:

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

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
对象的
表示
外显子
且
是
a
子
类
的DNAFeature。应实施以下方法: getFeats()
–
返回
DNAFeature
个对象的列表,
按
开始
位置
排序
 addFeat(feat)
接受
a
DNAFeature
feat
并将
it
添加到
其
内部
组
DNAFeature
对象 settransstart(i)
–
接受
非负
int,
设置
起始
ATG
密码子
的
开始
位置
 getTranslStart()
–
返回
an
int,
起始
ATG
密码子的
开始
位置
 settransstop(i)
–
接受
正
int,
设置
结束
位置
停止
密码子
 getTranslStop()
–
返回
一个
int,
结束
位置
表示
停止
密码子
 setDisplayId
–
设置
基因
模型的
名称
是
a
字符串
 题目是
返回
返回
将
名称
的
名称
的
基因
模式,
返回
a
一个


GeneModel
的8233;应
提高
适当
适当
ValueError
以及
TypeError
除除
当何时
何时
何时
用户
将不正确的
类型
和
值传递给
构造函数
和
“设置”
方法

我试着写任何我想到的东西,读过书,也在寻找把代码组合起来的方法,但是我对编程太陌生了,几乎不知道如何正确地编写代码。老实说,这是我第一次上编程课。所以如果我在密码上犯了什么可笑的错误,请原谅我。我还没有完成我的代码,仍然在阅读书籍,看看我在代码方面做了哪些错误和正确的事情。但是,我真的需要你的帮助来指引我走上正确的道路。非常感谢你们。以下是我的代码:

class 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

Tags: and代码selfreturndefstartintend
2条回答

首先,清理一下。我不完全相信你原来的类DNAFeature实际上是正确的。DNAFeature似乎是从其他类继承的,名为Range,我们在这里缺少它,所以如果您有该代码,请提供它。在原来的类中,您需要定义变量SeqName(同时,最好保持变量小写),否则self.seq名称将毫无意义。另外,除非它们是从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类是正确的,以及你希望你的问题如何解决的模型(根据你的类做什么),当问题变得更清楚时再问一次。希望这有帮助!在

我不明白基因模型的名字是什么。我认为这是特定主题的,但我认为这对你有用:

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

希望这有帮助。在

相关问题 更多 >