Presentation is loading. Please wait.

Presentation is loading. Please wait.

Advanced Python Concepts: Object Oriented Programming

Similar presentations


Presentation on theme: "Advanced Python Concepts: Object Oriented Programming"— Presentation transcript:

1 Advanced Python Concepts: Object Oriented Programming
BCHB524 Lecture 17 BCHB524 - Edwards

2 Using Classes We've actually been using objects and their methods already! s = 'ACGTACGTACGTACGT' print s.count('T') print s.replace('T','U') l = [6,5,4,3,2,1] l.append(10) l.sort() s = set() s.add(1) s.add(2) BCHB524 - Edwards

3 Using Classes We've actually been using objects and their methods already! import Bio.SeqIO thefile = open("ls_orchid.fasta") for seq_record in Bio.SeqIO.parse(thefile, "fasta"):     print seq_record.id     print seq_record.description     print seq_record.seq thefile.close() BCHB524 - Edwards

4 Using Classes Classes make instances of objects
string is a class, 'ACGT' is an instance of a string. Make new instances using class name: s = string(), d = dict(), s = set(), i = int(2) Objects can hold information seq_record.id, seq_record.seq, seq_record.annotations Called data members or attributes Objects can perform actions s = 'ACGT'; print s.count('a') Called methods BCHB524 - Edwards

5 Classes as Concepts Classes allow us to add new concepts to a language. Suppose we wanted to add a "DNA sequence" concept to python What information should "DNA sequence" capture? What actions or operations should "DNA sequence" provide? BCHB524 - Edwards

6 DNA Sequence Class Data members: Methods: sequence, name, organism.
length, reverse, complement, reverseComplement, transcribe, translate percentGC, initMet, freq BCHB524 - Edwards

7 DNA Sequence Class class DNASeq:     def reverse(self):         return self.seq[::-1]     def complement(self):         d = {'A':'T','C':'G','G':'C','T':'A'}         return ''.join(map(d.get,self.seq))     def reverseComplement(self):         return ''.join(reversed(self.complement()))     def length(self):         return len(self.seq) ds = DNASeq() ds.seq = 'ACGTACGTACGT' ds.name = 'My sequence' print ds.complement(),ds.length(),ds.reverseComplement() BCHB524 - Edwards

8 DNA Sequence Class class DNASeq:     #....     def length(self):         return len(self.seq)     def freq(self,nuc):         return self.seq.count(nuc)     def percentGC(self):         gccount = self.freq('C') + self.freq('G')         return 100*float(gccount)/self.length() ds = DNASeq() ds.seq = 'ACGTACGTACGT' ds.name = 'My sequence' print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() BCHB524 - Edwards

9 DNA Sequence Class The special method __init__ is called when a new instance is created. Used to initialize data-members. Forces class user to provide valid initial information. class DNASeq:     def __init__(self,seq,name):         self.seq = seq         self.name = name     #.... ds = DNASeq('ACGTACGTACGTACGT', 'My sequence') print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() BCHB524 - Edwards

10 DNA Sequence Class Somtimes __init__ is used to set up an "empty" instance. Other methods or data-members used to instantiate class DNASeq:     def __init__(self):         self.seq = ""         self.name = ""     def read(self,filename):         self.seq = ''.join(open(filename).read().split()) #.... ds = DNASeq() ds.name = 'Anthrax SASP' ds.read('anthrax_sasp.nuc') print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() BCHB524 - Edwards

11 DNA Sequence Class Default arguments allow us to set up "empty", partial, or completely instantiated instances. class DNASeq:     def __init__(self,seq="",name=""):         self.seq = seq         self.name = name     def read(self,filename):         self.seq = ''.join(open(filename).read().split())     #.... ds = DNASeq(name='Anthrax SASP') ds.read('anthrax_sasp.nuc') print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() BCHB524 - Edwards

12 Complete DNASeq.py Module
class DNASeq:     def __init__(self,seq="",name=""):         self.seq = seq         self.name = name     def read(self,filename):         self.seq = ''.join(open(filename).read().split())     def reverse(self):         return self.seq[::-1]     def complement(self):         d = {'A':'T','C':'G','G':'C','T':'A'}         return ''.join(map(d.get,self.seq))     def reverseComplement(self):         return ''.join(reversed(self.complement()))     def length(self):         return len(self.seq)     def freq(self,nuc):         return self.seq.count(nuc)     def percentGC(self):         gccount = self.freq('C') + self.freq('G')         return 100*float(gccount)/self.length() BCHB524 - Edwards

13 Complete DNASeq.py Module
Describe class in a module, then access using an import statement from DNASeq import DNASeq ds = DNASeq('ACGTACGTACGTACGT','My sequence') print ds.complement(),ds.length(),ds.reverseComplement() print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() ds = DNASeq() ds.read('anthrax_sasp.nuc') print ds.complement(),ds.length(),ds.reverseComplement() print ds.freq('C'),ds.freq('G'),ds.length(),ds.percentGC() BCHB524 - Edwards

14 A class for codon tables
Method calls, for instance "codons": codons.read(filename) stores the contents of filename in the codon_table object. codons.amino_acid(codon) returns amino-acid symbol for codon codons.is_init(codon) returns true if codon is an initiation codon false, otherwise codons.get_ambig_aa (codon) returns single amino-acid represented by a codon with N's codons.startswith_init(seq) returns true if DNA sequence seq starts with init codon codons.translate(seq,frame) returns amino-acid sequence for DNA sequence seq BCHB524 - Edwards

15 A class for codons from DNASeq import * from codon_table import * import sys if len(sys.argv) < 3:     print "Require codon table and DNA sequence on command-line."     sys.exit(1) codons = codon_table() codons.read(sys.argv[1]) seq = DNASeq() seq.read(sys.argv[2]) if codons.startswith_init(seq):     print "Initial codon is an initiation codon" for frame in (1,2,3):     print "Frame",frame,"(forward):",codons.translate(seq,frame) BCHB524 - Edwards

16 A class for codons In codon_table.py:
class codon_table:     def __init__(self):         self.table = {}     def read(self,filename):         # magic     def amino_acid(self,codon):         # magic         return aa     def is_init(self,codon):         # magic         return result     def get_ambig_aa(self,codon):         # magic         return aa     def startswith_init(self,seq):         # magic         return result def translate(self,seq,frame):         # magic         return aaseq BCHB524 - Edwards

17 Side by side from DNASeq import * from codon_table import * import sys if len(sys.argv) < 3:     print "Require codon table and", \           "DNA sequence on command-line."     sys.exit(1) codons = codon_table() codons.read(sys.argv[1]) seq = DNASeq() seq.read(sys.argv[2]) if codons.startswith_init(seq):     print "Initial codon" print codons.translate(seq,1) from MyNucStuff import * from codon_table import * import sys if len(sys.argv) < 3:     print "Require codon table and", \           "DNA sequence on command-line."     sys.exit(1) codons = read_codons(sys.argv[1]) seq = read_seq(sys.argv[2]) if is_init(codons,seq[:3]):     print "Initial codon" print translate(codons,seq,1) BCHB524 - Edwards

18 Exercise Convert your modules for DNA sequence and codons to a codon_table and DNASeq class. Demonstrate the use of this module and the codon table module to translate an amino-acid sequence in all six-frames with just a few lines of code. Hint: just import the new classes from their module(s) and call the necessary methods/functions! BCHB524 - Edwards

19 Homework 8 Due Monday, November 5th. Exercise from Lecture 16
BCHB524 - Edwards


Download ppt "Advanced Python Concepts: Object Oriented Programming"

Similar presentations


Ads by Google