2015-01-26 14:54 GMT+01:00 jarod...@libero.it <jarod...@libero.it>: > Thanks so much!! Now I understood it is a stupid thing! > So, could you elpme to decompose the problem? > I initiazlizate the class with the file to use so all the function have all > the parameters that I need. > > At the moment I have in mind only to do this: > ena = Rna() > job1 = ena.trim() > job2 = ena.align() > It is no so elegant.. > > > > Any suggestion? >
Without seeing what exactly are you trying to do (I'm not a chemist/biologist) I'm not sure. Any detail about what you're trying to do would be helpful. If you're bothered by having to call 2 methods except of 1 you could always make another method that uses the two. It really depends on the decision if you want to do the operations in place or not, that is transform the original object through it's methods, or do you want to return a new object of the same class. In your example you write "job" as if you're dealing with threads. I can't tell if you want job1 and job2 to be another different objects (maybe of Rna class maybe not) or is it just that you don't understand that you can also call a method on an object without having a variable to hold a return value. If you want to return another Rna object that is the same as the original one, maybe something like this is what you need? i.e. import copy class Rna(): def __init__(self): self.trimmed = False self.aligned = False #NOT a part of the class def trim(rna): temp = copy.copy(rna) temp.trimmed = True return temp #in interpreter >>>> ena = Rna() >>>> ena.trimmed False >>>> tena = trim(ena) >>>> ena.trimmed False >>>> tena.trimmed True and both of ena and tena will be of class Rna. So you now have 2 different Rna objects. You could also have it done in place, which saves memory and is more natural and I'd recommend it: class Rna(): def __init__(self): self.trimmed=False self.aligned=False def trim(self): self.trimmed=True def align(self): self.aligned=True def DoBoth(self): self.trim() self.align() print("Done!") #in the interpreter >>>> ena = Rna() >>>> ena.trimmed False >>>> ena.aligned False >>>> ena.DoBoth() Done! >>>> ena.trimmed True >>>> ena.aligned True This way you can do both without having to constantly write them yourself... you issue 1 call which then calls various other methods you have on the instance itself.... Even that print isn't necessary, that's just there to show it finished. You don't always have to have a variable to catch potential output of a method. But maybe if you need/want to catch the output maybe that output is an object of a different class(?) maybe it's a tuple, or an array? class Rna(): def __init__(self): self.trimmed=False self.aligned=False def trim(self): self.trimmed=True def align(self): self.aligned=True def DoBoth(self): self.trim() self.align() print("Done! We return an list of solutions:") return [1,2,3,4,5,6,7,8,9] #in the interpreter >>>> ena = Rna() >>>> solutions = ena.DoBoth() Done! We return an list of solutions: >>>> solutions [1,2,3,4,5,6,7,8,9] You could also add the solutions as an attribute to the object you just did the calculation on: def DoBoth(self): self.trim() self.align() print("Done! We return an list of solutions:") self.solutions = [1,2,3,4,5,6,7,8,9] #in the interpreter >>>> ena = Rna() >>>> ena.DoBoth() Done! We return an list of solutions: >>>> ena.solutions [1,2,3,4,5,6,7,8,9] The better you describe WHAT you want and HOW you want it the better people here will be able to help you.... Best of luck, Dino _______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor