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

そして、ここで私がしなければならないことは次のとおりです。エクソンを表す DNAFeature オブジェクトのグループを含み、DNAFeature の子クラスである新しいクラス GeneModel を作成します。以下のメソッドを実装する必要があります: getFeats() – 開始位置でソートされた DNAFeature オブジェクトのリストを返します addFeat(feat) – DNAFeature 特技を受け入れ、DNAFeature オブジェクトの内部グループに追加します setTranslStart(i) – 非負の int、開始 ATG コドンの開始位置を設定します getTranslStart() – int、開始 ATG コドンの開始位置を返します setTranslStop(i) – 正の int を受け入れ、停止コドンの終了位置を設定します getTranslStop() – int を返します。停止コドンの終了位置 setDisplayId(s) – 遺伝子モデルの名前を設定します。s は文字列 getDisplayId() – 遺伝子モデルの名前を返します。たとえば、AT1G10555.1 などの文字列を返します。GeneModel は、ユーザーが正しくない型と値をコンストラクターと「set」メソッドに渡すと、適切な ValueError および TypeError 例外を発生させる必要があります。</p>

思いついたことを書いてみたり、本を読んだり、コードを組み立てる方法を調べたりしましたが、プログラミングは初めてで、コードを正しく書く方法をほとんど理解していません。正直なところ、プログラミングの授業を受けるのはこれが初めてです。したがって、コードに面白い間違いがあった場合は、ご容赦ください。私はまだ自分のコードを完成させていませんが、まだ本を読んで、自分のコードのどこが間違っていて、どこが正しいのかを確認しています。しかし、私を正しい道に導くために、あなたの助けが本当に必要です。どうもありがとうございました。以下は私のコードです:

クラス 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
4

2 に答える 2

1

まず、少しクリーンアップします。元のクラスである DNAFeature が実際に正しいかどうか、完全には確信が持てません。DNAFeature は、Range という名前の他のクラスから継承しているように見えますが、ここにはありません。そのコードがある場合は、それも提供してください。その元のクラスでは、変数 SeqName を定義する必要があります (また、変数を小文字のままにしておくことをお勧めします)。そうしないと、self.SeqName は無意味になります。さらに、Range クラスから継承されていない限り、メソッド「setStart」および「setEnd」も定義する必要があります。追加の変数をゲッターにすべきではないので、「s」を追加する代わりに「def getSeqName(self)」に自由に変更してください。あなたのコードが実際に何をするべきなのかわからないので、これ以上のコメントは保留します。

さらに、コメントで別のことを述べましたが、命名規則 (およびバイオから覚えていることはほとんどありません) から、実際には GeneModel を一連の DNAFeature インスタンスのコンテナーにする必要があると信じなければなりません。これは、DNAFeature をサブクラス化する GeneModel とは異なります。私が正しければ、次のことを試すことができます。

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 に答える