2010-10-17 23 views
0

j'avais cette classe et sous-classe:sous-classe/classe enfant

classe Gamme:

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 

classe 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 

Et Voici ce que je dois faire: Créez une nouvelle classe - GeneModel- qui contient un groupe d'objets DNAFeature représentant des exons et est une classe enfant de DNAFeature. Il doit implémenter les méthodes suivantes: getFeats() -retourne une liste d'objets DNAFeature, triés par position de départ addFeat (feat) - accepte un exploit DNAFeature et l'ajoute à son groupe interne d'objets DNAFeature setTranslStart (i) - accepte un entier non négatif, définit la position de départ du codon ATG initiateur getTranslStart() - retourne un int, la position de départ du codon ATG initiateur setTranslStop (i) - accepte un int positif, définit la position finale de l'arrêt codon getTranslStop() - retourne un int, la position finale de la codon d'arrêt setDisplayId (s): permet de régler le nom du modèle de gène; getDisplayId() renvoie le nom du modèle de gène, renvoie une chaîne, par exemple, AT1G10555.1 GeneModel doit déclencher des exceptions ValueError et TypeError appropriées lorsque les utilisateurs transmettent des types et des valeurs incorrects aux constructeurs et aux méthodes «set». J'ai essayé d'écrire tout ce qui me vient à l'esprit, de lire les livres et de chercher à assembler des codes, mais je suis si novice en programmation et je ne sais pas vraiment comment écrire les codes correctement. Pour être honnête, c'est la première fois que je fais un cours de programmation. Donc, si je fais une drôle d'erreur dans mes codes, s'il vous plaît pardonnez-moi. Je n'ai pas encore fini mes codes et je lis toujours les livres pour voir où je fais mal et juste avec mes codes. Cependant, j'ai vraiment besoin de votre aide pour me guider sur le bon chemin. Merci beaucoup les gars. Ci-dessous mes codes:

classe 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 
+0

Je suis un peu confus au sujet de votre modèle ici. GeneModel est supposé contenir un ensemble d'instances DNAFeature ou GeneModel est une sous-classe de DNAFeature. Cela fait une grande différence sur la façon dont vous écrivez votre code. – jlv

+0

oui, c'est, GeneModel est une classe enfant de DNAFeature, je suis vraiment désolé pour mes codes, je ne sais pas comment faire les choses correctement, en essayant de lire les livres ... – pmt0512

Répondre

1

Je ne comprends pas le nom du modèle de gène. Je pense que c'est sujet spécifique, mais je pense que cela fonctionnera pour vous:

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 

Espérons que cela aide.

+0

Est-ce parce que GeneModel est sous-classe de DNAFeature qui était une sous-classe de Range, que dans le def __init__ il sera doit être l'argument 3 que nous définissons dans Range qui est self, start et end? Est-ce juste? Je juste curieux, merci inspecteur – pmt0512

+0

Oui, mais plus important encore, si vous n'avez pas défini un init ici, GeneModel par défaut sera prendre l'init de DNAFeature – inspectorG4dget

+0

Je vois, un autre inspecteur de question, qu'est-ce que cela signifie en utilisant! = par ex: if type (s)! = str: ou tapez (i)! = int:? Merci – pmt0512

1

D'abord, un peu de nettoyage. Je ne suis pas complètement convaincu que votre classe originale, DNAFeature, est correcte. DNAFeature semble hériter d'une autre classe, nommée Range, qui nous manque ici, donc si vous avez ce code, veuillez l'offrir aussi. Dans cette classe d'origine, vous devez définir la variable SeqName (aussi, il est préférable de garder les variables en minuscules), sinon self.SeqName n'aura aucun sens. De plus, à moins qu'ils ne soient hérités de la classe Range, vous devez également définir les méthodes "setStart" et "setEnd". Vous ne devriez pas avoir de variables supplémentaires, alors n'hésitez pas à le changer en "def getSeqName (self)" au lieu d'ajouter "s". Je ne suis pas sûr de ce que votre code est vraiment censé faire, alors je vais faire un commentaire supplémentaire. De plus, bien que vous ayez indiqué le contraire dans votre commentaire, je dois croire à partir des conventions de nommage (et du peu dont je me souviens de bio) que vous voulez réellement que GeneModel soit un conteneur pour un ensemble d'instances DNAFeature. C'est différent du sous-classement DNAFeature de GeneModel.Si je ne me trompe pas, vous pouvez essayer:

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) 

Ici dnafeatures serait juste une liste d'instances de dnafeature. Cela vous permettrait alors d'écrire des méthodes pour accéder à ces fonctionnalités et faire tout ce que vous devez faire. Mon conseil serait de s'assurer que votre classe DNAFeature est correcte et que votre modèle de la façon dont vous voulez que votre problème soit résolu (en termes de ce que vos classes font) et essayez de demander à nouveau quand c'est un peu plus clair. J'espère que cela t'aides!

+0

J'ai mis à jour ma classe d'origine Range, pour une raison pour laquelle je ne sais pas pourquoi cela ne se compare pas parfaitement à la ligne Range et à la ligne suivante. Je ne suis pas sûr si la sous-classe DNAFeature est correcte car je n'ai aucun fichier de test pour le tester. Mais j'espère que vous pouvez m'aider à comprendre avec la classe originale. Merci beaucoup – pmt0512

+0

Merci pour la mise à jour lorsque votre classe Range. Il semble toujours que vous devez ajouter SeqName à DNAFeatures. Sinon, je crois que vous pouvez toujours prendre ma classe squelette GeneModel et ajouter des méthodes comme bon vous semble. Au fur et à mesure que vous apprendrez Python, vous découvrirez les façons les plus pythoniques de faire les choses (comme faire (self.end-self.start) au lieu de len (range (self.start, self.end)) mais j'espère que ça va commencer – jlv

+0

Je vois, je vais l'essayer, merci jlv beaucoup, votre guide m'aider beaucoup.Merci encore – pmt0512