Подкласс / Детский класс - PullRequest
       2

Подкласс / Детский класс

0 голосов
/ 17 октября 2010

У меня был этот класс и подкласс:

Диапазон класса:

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 (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. GeneModel должна вызывать соответствующие исключения ValueError и TypeError, когда пользователи передают неправильные типы и значения конструкторам и методам «set».

Я пытался написать все, что придет мне в голову, и читать книги, а также искать способы объединения кодов, но я настолько новичок в программировании и едва могу понять, как правильно писать коды.Если честно, это первый раз, когда я делаю урок программирования.Так что, если я сделаю какую-нибудь забавную ошибку в моих кодах, пожалуйста, прости меня.Я еще не закончил свои коды и все еще читаю книги, чтобы увидеть, где я делаю неправильно и правильно с моими кодами.Однако мне очень нужна ваша помощь, чтобы направить меня на правильный путь.Большое спасибо, ребята.Ниже приведены мои коды:

Класс 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 ]

1 голос
/ 17 октября 2010

Я не понимаю, как называется модель гена.Я думаю, что это зависит от конкретной темы, но я думаю, что это будет работать для вас:

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

Надеюсь, это поможет.

1 голос
/ 17 октября 2010

Во-первых, немного очистки.Я не совсем уверен, что ваш первоначальный класс, 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 правильный, и что ваша модель того, как вы хотите решить вашу проблемурешить (с точки зрения того, что делают ваши классы) и попробуйте снова спросить, когда это немного яснее.Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...